我使用python3.5和OpenCV 3.1.0,OpenCV函数cv2.countNonZero(img)我得到了一
I use python3.5 and OpenCV 3.1.0,OpenCV function cv2.countNonZero(img) I got a error
我得到以下代码的错误:
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通道)时,它给出错误。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 哪些库可以通过Opencv调整曝光率
- 安装opencv失败-粘贴CMakeError.log的内容
- C++中的openCV Mat访问冲突
- 如何将 cv::Mat & Img 复制到未签名的 char* img?opencv
- OpenCV VideoWriter Assertion Failed img.cols == width && img.rows == height*3
- 我在哪里可以找到完整的img包,用于训练opencv人脸识别系统?
- OpenCV 错误:断言失败((img.depth() == CV_8U || img.depth() == CV_32
- 带有opencv的值为0 1的imshow img
- OpenCV: assertation failed ((img.depth() == CV_8U || img.depth() == CV_32F) && img.type() == templ.t
- 将src和dst-img设置为与opencv resize函数相同
- 我使用python3.5和OpenCV 3.1.0,OpenCV函数cv2.countNonZero(img)我得到了一
- opencv python transfer ((uchar*)(img->imageData img->widthStep*i))[j];