我使用 python3.5 和 OpenCV 3.1.0,OpenCV 函数 cv2.countNonZero(img) 我得到一个错误 [重复]
Posted
技术标签:
【中文标题】我使用 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 [duplicate] 【发布时间】:2016-11-15 15:05:40 【问题描述】:我收到以下代码错误:
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)
我不明白为什么。
【问题讨论】:
***.com/questions/31231565/… ? 【参考方案1】:同样的问题,但这里是 C++:
countNonZero function gives an assertion error in openCV
解决方案:
countNonZero
的 OpenCV 文档说:
cv2.countNonZero(src) → retval
参数:src——单通道数组。
让我们看看imread
文档:
imread(const String& 文件名, int flags=IMREAD_COLOR )
参数:src flags -
=0 返回灰度图像。
如果您使用默认标志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
作为输入,这可能是很多疯狂的东西。
【讨论】:
感谢您的回答:) @TengFei 不客气。如果对我的回答有帮助,您可以投票赞成。 是的,您的回答很有帮助。我想投票,但这个页面提示我:感谢您的反馈!声望低于 15 人的投票会被记录,但不会更改公开显示的帖子得分。【参考方案2】:当我加载彩色图像时,我可能会重现类似的错误。
opencv 中的countNonZero
请求输入图像为单通道。当它是彩色图像(即具有 3 个通道)时,它会给出错误。
【讨论】:
以上是关于我使用 python3.5 和 OpenCV 3.1.0,OpenCV 函数 cv2.countNonZero(img) 我得到一个错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
1.Python3.5+Pyqt5+PyCharm+Opencv3.3+Qtdesigner开发环境配置
opencv3.3+TensorFlow+python3.5安装
无法使用 python 3.5 安装 opencv 3.1,仅适用于 2.7