C++中使用OpenCV的问题,可能和线程有关
在C++控制台程序中使用OpenCV进行颜色识别,用的VS2010,IplImage*img=cvLoadImage("E:\\1.jpg");colorRecog(im...
在C++控制台程序中使用OpenCV进行颜色识别,用的VS2010,
IplImage *img = cvLoadImage("E:\\1.jpg");
colorRecog(img);
其中colorRecog是自己写的颜色识别,是使用IplImage*从其中读取点的RGB值来判断的,如果cvLoadImage()加载的图片较小时,程序正常,但是图片较大时,就会出现:
color.exe 中的 0x773e15ee 处有未经处理的异常: 0xC0000005: 读取位置 0x00da9722 时发生访问冲突。
猜测和多线程有关,因为之前还有弹出一个tidtable.c的文件,网上查了像是和线程有关。
怎么解决这个问题呢? 展开
IplImage *img = cvLoadImage("E:\\1.jpg");
colorRecog(img);
其中colorRecog是自己写的颜色识别,是使用IplImage*从其中读取点的RGB值来判断的,如果cvLoadImage()加载的图片较小时,程序正常,但是图片较大时,就会出现:
color.exe 中的 0x773e15ee 处有未经处理的异常: 0xC0000005: 读取位置 0x00da9722 时发生访问冲突。
猜测和多线程有关,因为之前还有弹出一个tidtable.c的文件,网上查了像是和线程有关。
怎么解决这个问题呢? 展开
1个回答
展开全部
首先,你写了多线程没有?如果你没写,那就一定是单线程。
其次,你说图片大,是多大?长宽多少?
还有就是你还有没有打开很多图片,然后用完都没有release掉?
其次,你说图片大,是多大?长宽多少?
还有就是你还有没有打开很多图片,然后用完都没有release掉?
追问
应该是在OpenCV的函数中使用了多线程,在Debug模式下,出错会弹出tidtable.c文件,在这个函数末尾停住,确实和线程有关
_ptiddata __cdecl _getptd_noexit (
void
)
{
……
return(ptd);
}
我刚试了一下,如果用软件把那张图片格式转换一下就能运行,即使设定转换后尺寸加大,但是就是打开原图会出错,那张图是用OpenCV直接从摄像头读取的。
追答
那就是从摄像头获取的时候出错。
你试试看,什么都不做,就只是把从摄像头读到的图片显示出来行不。
在vs的debug区域里直接看看那张图片变量的信息,看看有没有问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询