2016-01-11 34 views
8

Tôi đang làm việc trong python trên openCV 3.0. Để tìm vùng pixel trắng lớn nhất, trước tiên là tất cả các hình ảnh màu xám được đánh dấu thành hình ảnh nhị phân.OpenCV findContours trong python

import cv2 

import numpy as np 

img = cv2.imread('graimage.png') 

img = cv2.resize(img,(400,500)) 

gray = img.copy() 

(thresh, im_bw) = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY) 

derp,contours,hierarchy = cv2.findContours(im_bw,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

cnts = max(cnts, key=cv2.contourArea) 

Nhưng nó hiển thị lỗi như sau.

cv2.error: ..../opencv/modules/imgproc/src/contours.cpp:198: error: (-210) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function cvStartFindContours.

+7

Hình ảnh của bạn 8 bit Unsigned char? Hoặc bạn có thể viết 'img = imread (' grainimage.png ', 0)' để chuyển đổi thành thang độ xám. – user3515225

+0

Cảm ơn bạn, nó đã hoạt động. – Kaira

Trả lời

0

Nó trông như thế này đã được trả lời trong các ý kiến, nhưng chỉ để đánh dấu các câu hỏi như đã trả lời:

CV_8UC1 nghĩa pixel 8-bit, unsigned, và chỉ có một kênh, vì vậy màu xám. Có vẻ như bạn đang đọc nó với 3 kênh màu hoặc CV_8UC3. Bạn có thể kiểm tra loại hình ảnh bằng cách in img.dtypeimg.shape. Kiểu dtype phải là uint8 và hình dạng phải là (#, #), biểu thị hai chiều. Tôi đoán bạn sẽ thấy rằng hình dạng in (#, #, 3) cho hình ảnh của bạn như là, chỉ ra ba kênh màu.

Như @ user3515225 đã nói, bạn có thể khắc phục điều đó bằng cách đọc hình ảnh dưới dạng màu xám bằng cách sử dụng cv2.imread('img.png', cv2.IMREAD_GRAYSCALE). Điều đó giả định bạn không có sử dụng cho màu sắc bất cứ nơi nào khác, mặc dù. Nếu bạn muốn một màu xám riêng biệt sao chép của hình ảnh, sau đó thay thế gray = img.copy() bằng gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) thay thế.