我是OpenCV的新手,当我运行模板匹配代码时,我收到Assertion失败错误。错误消息在下面给出
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor,
file /home/travis/miniconda/conda-bld/conda_1485299292920/work/opencv-
3.2.0/modules/imgproc/src/color.cpp, line 9748
Traceback (most recent call last):
File "opencv_basics.py", line 6, in <module>
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
cv2.error: /home/travis/miniconda/conda-
bld/conda_1485299292920/work/opencv-
3.2.0/modules/imgproc/src/color.cpp:9748: error: (-215) scn == 3 ||
scn == 4 in function cvtColor
这是我尝试运行的代码。
import cv2
import numpy as np
#Template Matching
img_rgb = cv2.imread('opencv-template-matching-python-tutorial.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('opencv-template-for-matching.jpg',0)
w, h = template.shape[::-1]
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,255,255), 2)
cv2.imshow('Detected',img_rgb)
所用图片的gdrive文件夹链接为here
我尝试重新安装opencv3,但这是徒劳的。 我使用的是python 3.5和OpenCV 3.2.0。 在你回答我的问题之前,我读了同样问题的其他问题,但它们并没有为我工作。
答案 0 :(得分:2)
一个好的做法总是加载资源,比如读取图像,检查资源是否实际加载。在这种情况下,您应该检查:
img_bgr = cv2.imread('opencv-template-matching-python-tutorial.jpg')
if img_bgr is not None
img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
注意:由于在OpenCV中默认情况下颜色空间模型是BGR(而不是RGB)我只是将img_rgb变量重命名为img_bgr。
答案 1 :(得分:1)
确保图像与代码位于同一文件夹中。
我知道,这很愚蠢,可能你已经检查过了。我有同样的问题。答案似乎很愚蠢,但它对我有用。我猜你已经弄清楚了。但是为了没有人重复它,我会把它留在这里。
根据我的发现,如果问题仍然存在,您应该搜索“imread not not images images”,因为这是此错误的根源。
P.S。我也遵循相同的教程!保持学习!对于那些没有经验的人:https://pythonprogramming.net/template-matching-python-opencv-tutorial/
答案 2 :(得分:0)
如果您在项目中使用Raspberry Pi,则必须运行以下命令:
#sudo modprobe bcm2835-v4l2
该命令的说明在以下链接中给出: OpenCV Error: Assertion Failed (scn == 3 || scn == 4) in cvtColor