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的文件,网上查了像是和线程有关。

怎么解决这个问题呢?
展开
 我来答
z3w1h4
2012-11-29 · TA获得超过639个赞
知道小有建树答主
回答量:418
采纳率:0%
帮助的人:283万
展开全部
首先,你写了多线程没有?如果你没写,那就一定是单线程。
其次,你说图片大,是多大?长宽多少?
还有就是你还有没有打开很多图片,然后用完都没有release掉?
追问
应该是在OpenCV的函数中使用了多线程,在Debug模式下,出错会弹出tidtable.c文件,在这个函数末尾停住,确实和线程有关
_ptiddata __cdecl _getptd_noexit (
void
)
{
……
return(ptd);
}
我刚试了一下,如果用软件把那张图片格式转换一下就能运行,即使设定转换后尺寸加大,但是就是打开原图会出错,那张图是用OpenCV直接从摄像头读取的。
追答
那就是从摄像头获取的时候出错。
你试试看,什么都不做,就只是把从摄像头读到的图片显示出来行不。
在vs的debug区域里直接看看那张图片变量的信息,看看有没有问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式