2016-11-15 93 views
1

我得到下面的代碼中的錯誤:我使用python3.5和OpenCV 3.1.0,OpenCV的功能cv2.countNonZero(IMG)我得到了一個錯誤

img = cv2.imread('temp.jpg') 
z = cv2.countNonZero(img) 
print(z) 

OpenCV Error: Assertion failed (cn == 1) in cv::countNonZero, file D:\Build\OpenCV\opencv-3.1.0\modules\core\src\stat.cpp, line 1342 
Traceback (most recent call last): 
    File "C:\Users\hasee\Desktop\open\GuiFeaturesinOpenCV\Performance Measurement and Improvement Techniques\TestTickCount.py", line 29, in <module> 
    z = cv2.countNonZero(img) 
cv2.error: D:\Build\OpenCV\opencv-3.1.0\modules\core\src\stat.cpp:1342: error: (215) cn == 1 in function cv::countNonZero 

但是,如果使用我numpy的功能它是好的:

z = np.count_nonzero(img) 
print(z) 

我不明白爲什麼。

+6

http://stackoverflow.com/questions/31231565/countnonzero-function-gives-an-assertion-error-in-opencv? –

回答

0

同樣的問題,但C++在這裏:

countNonZero function gives an assertion error in openCV

解決方案:

countNonZero的OpenCV的文件說:

cv2.countNonZero(SRC)→ retval

參數:src - 單通道陣列。

讓我們來看看imread文檔:

imread(常量字符串&文件名,INT標誌= IMREAD_COLOR)

參數:src標誌 -

= 0返回灰度圖像。

< 0按原樣返回加載的圖像(帶有alpha通道)。

如果加載與默認標誌IMREAD_COLOR的圖像,如果圖像(以及返回的墊)被着色3通道或單通道灰度級的OpenCV將動態檢測。

解決您的問題,讓OpenCV的轉換您加載圖像自動灰度:

img = cv2.imread('temp.jpg',cv2.CV_LOAD_IMAGE_GRAYSCALE) 
z = cv2.countNonZero(img) 
print(z) 

你也可以轉換與加載cv2.cvtColor後,你的形象。

你的numpy代碼工作正常,因爲np.count_nonzero需要array_like作爲輸入,這可能是很多瘋狂的東西。

+0

感謝您的回答:) – TengFei

+0

@騰飛不客氣。如果有幫助,你可以投我的答案。 –

+0

是的,你的回答很有幫助。我想投票,但這個頁面促使我:感謝您的反饋!記錄下名聲低於15的人的投票記錄,但不要更改公開顯示的帖子分數。 – TengFei

0

當我加載彩色圖像時,我可能會重現類似的錯誤。

countNonZero在opencv中請求輸入圖像爲單通道。當它是彩色圖像(即有3個通道)時,會發生錯誤。

相關問題