【发布时间】:2015-09-23 21:09:00
【问题描述】:
我有一个简单的 OpenCV 代码,用于加载图像并将其转换为灰度。我有一个包含已复制图像的文件夹。只是同一帧一遍又一遍,文件名不同,文件内容完全一样。
我运行一个循环并尝试转换图像,它运行了 1020 帧并在每次出现错误时停在该特定帧上:
“错误:(-215) scn == 3 || scn == 4 in function ipp_cvtColor”
每次都会出现。我不明白这一点,如果代码适用于第一个图像,理论上它应该适用于文件夹中的所有其他图像,因为它们是同一个文件,只是文件名不同。我正在运行 OpenCV 3.0,并且还收到以下特定错误:
“OpenCV 错误:在 ipp_cvtColor,file/home/blah/OpenCV3.0/opencv/modules/imgproc/src/color.cpp,第 7453 行中断言失败 (scn == 3 || scn == 4)”
程序停止时。
我的代码是:
char * baseImagePath; //these are updated as the program iterates
char * nextImagePath; //they contain the full path of the image
Mat baseImage, nextImage;
Mat grayImage1,grayImage2;
baseImage = imread(baseImagePath, CV_LOAD_IMAGE_COLOR);
if(baseImage.empty()){
printf("%s EMPTY!\n", baseImagePath);
}
cvtColor(baseImage, grayImage1, COLOR_BGR2GRAY);
nextImage = imread(nextImagePath, CV_LOAD_IMAGE_COLOR);
if(nextImage.empty()){
printf("%s EMPTY!\n", nextImagePath);
}
cvtColor(nextImage, grayImage2, COLOR_BGR2GRAY);
所以,这很奇怪。当我运行我的代码时,我确认我的程序认为特定帧的图像是空的,但是当我运行时:
display frame.jpg
如果 frame.jpg 是我的程序声称为空的帧,imageMagick 可以很好地显示视频。
【问题讨论】:
-
看起来文件夹中的某些文件不是有效图像,或者它已经是灰度图像。尝试检查所有文件并确保它们都是彩色图像(RGB 或 RGBA)。
-
有效图像是什么意思?我使用的图像只是一张图像,一遍又一遍地复制。它只是具有不同文件名的相同文件内容。我使用的图像绝对是彩色图像。
-
我的意思是,因为您正在复制图像(我想,您正在使用一些循环来遍历所有图像)也许循环(或您正在使用的任何东西)正在读取一些意外的文件不是有效的图像。你说它停在一个特定的帧上,这个帧和其他帧是一样的还是有一些不同?您可以尝试使用诸如 file, identify 之类的命令来查看此文件是否是有效图像以及它是否具有与其他文件相同的 md5sum(只是为了确保它是原始图像的副本)。
-
检查图片是否加载正确,尝试显示它们
-
我按照你说的做了,并验证了它们是有效的文件。仍然有同样的错误。可以肯定的是,我从 YouTube 上拍摄了一段视频,并使用 avconv 将视频转换为帧,但它仍然给我同样的错误,只是现在在不同的帧上,第 1038 帧。我做错了什么吗?而不是 imshow,我只使用 display (ImageMagick) 并且图像打开得很好。
标签: c++ opencv file-io opencv3.0