我得到以下代码的错误:
img = cv2.imread('temp.jpg')
z = cv2.countNonZero(img)
print(z)
OpenCV Error: Assertion failed (cn == 1) in cv::countNonZero, file D:BuildOpenCVopencv-3.1.0modulescoresrcstat.cpp, line 1342
Traceback (most recent call last):
File "C:UsershaseeDesktopopenGuiFeaturesinOpenCVPerformance Measurement and Improvement TechniquesTestTickCount.py", line 29, in <module>
z = cv2.countNonZero(img)
cv2.error: D:BuildOpenCVopencv-3.1.0modulescoresrcstat.cpp:1342: error: (215) cn == 1 in function cv::countNonZero
但是,如果我使用numpy函数它是可以的:
z = np.count_nonzero(img)
print(z)
我不明白为什么。
相同的问题,但是这里c++:
countNonZero函数给出openCV
断言错误解决方案:
countNonZero
的OpenCV文档说:
cv2.countNonZero(src)→检索
参数:src -单通道数组。
让我们看一下imread
文档:
imread (const String&filename, int flags=IMREAD_COLOR)
参数:src flags -
=0返回灰度图像。
<0按原样返回加载的图像(带有alpha通道)。>
如果你加载带有默认标志IMREAD_COLOR
的图像,OpenCV将动态检测图像(和返回的垫)是3通道灰度还是1通道灰度。
要解决这个问题,让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
作为输入,这可能是很多疯狂的东西
当我加载彩色图像时,我可能会重现类似的错误。
opencv中的 countNonZero
请求输入图像为单通道。当它是彩色图像(即3通道)时,它给出错误。