2017-09-28 126 views
3

我是OpenCV的新手,我在运行模板匹配代码时遇到声明失败错误。错误消息如下OpenCV错误:声明失败(scn == 3 || scn == 4)在cvtColor

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。 在你解决我的问题之前,我阅读了同样问题的其他问题,但他们不适合我。

回答

1

总是加载资源,比如读取图像,检查资源是否实际加载是一个很好的做法。在这种情况下,你应该检查:

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

确保图像与代码位于同一文件夹中。

我知道,这很愚蠢,可能你已经检查过了。我有同样的确切问题。答案似乎很愚蠢,但它对我有效。我假定你已经知道了。但为了没有人重复它,我会在这里留下。

从我发现的情况来看,如果问题依然存在,你应该搜索“imread not loading images”,因为这是这个错误的根源。


P.S.我也是按照相同的教程!保持学习!对于那些不熟悉的人:https://pythonprogramming.net/template-matching-python-opencv-tutorial/

+0

谢谢,船长。 – papabiceps

相关问题