cv2.error: ⼀io⼀opencv⼀modules⼀imgproc⼀src⼀color.cpp:10638: error: (-215) scn == 3 || scn == 4 i

2024-12-21 20:40:14
推荐回答(1个)
回答1:

1. 编译第一个opencv程序,出现了如下的错误。

[plain] view plain copy

  • 1>openCVTest.obj : error LNK2019: 无法解析的外部符号 _cvReleaseImage,该符号在函数 _wmain 中被引用  

  • 1>openCVTest.obj : error LNK2019: 无法解析的外部符号 _cvDestroyWindow,该符号在函数 _wmain 中被引用  

  • 1>openCVTest.obj : error LNK2019: 无法解析的外部符号 _cvWaitKey,该符号在函数 _wmain 中被引用  

  • 1>openCVTest.obj : error LNK2019: 无法解析的外部符号 _cvShowImage,该符号在函数 _wmain 中被引用  

  • 1>openCVTest.obj : error LNK2019: 无法解析的外部符号 _cvNamedWindow,该符号在函数 _wmain 中被引用  

  • 1>openCVTest.obj : error LNK2019: 无法解析的外部符号 _cvLoadImage,该符号在函数 _wmain 中被引用  

  • 这种错误很大概率是因为需要的库并没有添加进去,但是我仔细检查了好几遍,需要的opencv的库我都添加了。鼓捣了半天,最后发现原来是我的配置设错了,我的电脑是64位的,但却设置成了win32。修改方法为在配置中添加一个x64的选项,然后应用该选项即可。

  • 2. fatal error C1010错误,具体错误信息如下:

    [plain] view plain copy

  • detection.cpp(11): fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?  

  • 解决方法,进行如下图所示的修改。将预编译头选项由“使用(/Yu)”改为“不使用预编译头”
  • 3. 在Visual Studio中读取文件或者haarcascade_frontalface_alt.xml时文件的格式问题。正确的路径格式应为"C:/path"或者为"C:\\path",Windows下默认的"C:\path"这样的格式是错误,会导致一些读取文件上的错误。

    4. Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:529)错误

    主要原因是读取的文件的路径不正确,结合第三个错误进行改正。

    5. 通过cv.cvtColor()函数将图像转为灰度图像时发生错误,错误信息如下:

    [plain] view plain copy

  • OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file ........\opencv\modules\imgproc\src\color.cpp, line 3737 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.error: ........\opencv\modules\imgproc\src\color.cpp:3737: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor  

  • 错误原因是因为你的输入文件不合法,正确的image应该至少有3或者4个channel,但是我通过image.shape只显示为2,说明它是一个灰度图像。奇怪的是我读入的文件确实是一个彩色图像,怎么会显示是灰度图像呢?然后我尝试把读取的图像再通过cv2.imwrite()函数写出来,果然重新写出来的图像是一张灰度图像,那到底是哪个地方出的错?因为cv2.cvtColor()前面就只有一个cv2.imread()的函数,莫非是该函数读取图像时出的问题?该函数只有两个参数,第一个是要读取的图像的路径,第二个是个0。但是自己对这第二个参数0却是不明觉厉,究竟这个参数是干啥用的。赶紧上网查找,果然是这个0搞的鬼。
  • Python:cv2.imread(filename[, flags])

    这是该函数的语法。这个flags参数指定加载图像的color类型:如果大于0,返回一个3通道的彩色图像;如果为0,返回一个灰度图像;如果小于0,则返回加载的图像本身(with alpha channel)。

    将第二个参数0去掉后,果然问题就解决了。

    6. imread()读取错误

    首先看看是不是文件的路径错误,如果路径正确的情况下仍然出现错误,很有可能是配置opencv的dll的问题,比如你的程序运行的是debug,但是opencv的dll却是release版本;或者运行的是release,但是opencv的dll却是debug版本。一句话就是运行和dll的版本不匹配。