我使用 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_nonzeroarray_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

使用 Homebrew 和 pyenv 在 Mac 上安装 OpenCV 3 for Python 3

python 3.5的Python OpenCV导入错误

PYTHON3.5安装及OPENCV安装