OpenCV错误:在树莓派上断言失败(scn == 3 || scn == 4)

6
我跟随了这个教程来进行OpenCV物体追踪,并成功在我的笔记本电脑上运行了代码,无论是在Windows上使用Visual Studio,还是在我的Ubuntu虚拟机上(使用CMake)。现在我想在我的树莓派(运行Raspbian)上运行它。 cmake .make命令似乎工作正常,但当我尝试运行可执行文件时,会出现以下错误:
pi@raspberrypi ~/Desktop/Track $ ./TrackObj 
init done 
opengl support available 
OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor, file /home/pi/opencv-2.4.10/modules/imgproc/src/color.cpp, line 3961
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/pi/opencv-2.4.10/modules/imgproc/src/color.cpp:3961: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor

Aborted

我看过这个问题和类似的问题,但它们没有帮助我解决问题。

源代码在此处可用:

objectTrackingTutorial.cpp

Fruit.cpp

Fruit.h

我听说问题可能出在相机或相机驱动程序上,所以我尝试使用USB相机和树莓派相机,并尝试更改capture.open(0);这一行,改为capture.open("someMovie.mp4");,这样它将不是打开实时流,而是运行现有视频,但仍然会出现同样的错误。


也许可以尝试使用预加载的图像,确保其大小、格式等完全正确。这是因为它可能以完全意想不到的方式从网络摄像头读取。 - GPPK
你能具体点吗?你是指我应该改变 Capture.open(0); 吗? - DMEM
你正在使用树莓派相机吗? - theo-brown
也许程序期望得到一个它没有收到的参数。我曾经因为这个原因看到过类似的错误。 - j0h
1个回答

5
错误表明您在调用'cvtColor()'时要转换的帧或图像与您在函数中指定的类型不同。 可能有两种原因:
  1. 图像具有不同的类型
  2. 或者您的框架为空
尝试将CV_BGR2HSV更改为CV_RGB2HSV,或尝试打印您从相机获取的图像以检查它是否为空。 希望这有所帮助。

将CV_BGR2HSV更改为CV_RGB2HSV并没有起作用。您能否详细解释一下如何从相机打印图像?提醒一下:此代码在我的笔记本电脑(Ubuntu和Windows)上完美运行。这就是我认为问题与Pi有关的原因。 - DMEM
要从相机打印图像,只需使用以下代码: if(!image.empty()) imshow(" result ", image); else continue; - Kacem
我知道如何打印一张图片,但我想问一下,在这段代码中应该如何尝试打印呢?因为这段代码似乎无法正常工作。 - DMEM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接