原文链接:http://www.juzicode.com/python-error-countnonzero-cn-must-be-1
错误提示:
countNonZero()统计图像中非0的像素点时提示error: (-215:Assertion failed) cn == 1 in function ‘cv::countNonZero’
#VX公众号:桔子code / juzicode.com
import cv2
img_src = cv2.imread('lena.jpg')
count = cv2.countNonZero(img_src)
print('非零像素点个数:',count)
==========运行结果:
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-11-652b3552c021> in <module>
2 import cv2
3 img_src = cv2.imread('lena.jpg')
----> 4 count = cv2.countNonZero(img_src)
5 print('非零像素点个数:',count)
error: OpenCV(4.5.3) E:\juzicode\opencv-4.5.3\modules\core\src\count_non_zero.dispatch.cpp:128: error: (-215:Assertion failed) cn == 1 in function 'cv::countNonZero'
错误原因:
1、countNonZero()的输入图像只能是单通道图像。
解决方法:
1、将输入的图像转换为灰度图再计算非零像素值:
#VX公众号:桔子code / juzicode.com
import cv2
img_src = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
count = cv2.countNonZero(img_src)
print('非零像素点个数:',count)
==========运行结果:
非零像素点个数: 262144
2、单独计算其分量图像的非零像素值:
#VX公众号:桔子code / juzicode.com
import cv2
img_src = cv2.imread('lena.jpg')
b,g,r = cv2.split(img_src)
count = cv2.countNonZero(b)
print('b通道非零像素点个数:',count)
count = cv2.countNonZero(g)
print('g通道非零像素点个数:',count)
count = cv2.countNonZero(r)
print('r通道非零像素点个数:',count)
==========运行结果:
b通道非零像素点个数: 262144
g通道非零像素点个数: 262121
r通道非零像素点个数: 262144
扩展内容:
如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。