OpenCV Bug集合

来源:互联网 发布:蓝月传奇翅膀数据 编辑:程序博客网 时间:2024/04/19 22:04

OpenCV Bug集合


不定期更新


1.vs2010引用了MotionDll.dll,可是报错:

Error 1 error LNK1104: cannot open file ‘MotionDll.lib’

解决方案:

1)检查该dll文件是否在当前工程目录下
2)检查MotionDll.dll的引用位置是否配置正确:项目properties - Linker - Additional Library Directories:
检查MotionDll.dll的引用位置是否配置正确

2.cvGet2D函数越界问题
CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );
对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。
idx0代表是的行,即高度,对应于我们平常坐标系的y,
idx1代表的是列,即宽度,对应于我们平常坐标系的x,
cvSet2D() 也类似。所以在使用cvSet2D() 与 cvGet2D() 时,千万要注意坐标的顺序,是相反的。
即,要获取图像img中的某一像素点 P(x, y),调用时是cvGet2D( img, y, x );

3.

    Mat img = imread("pic.jpg");    cout << img.at<uchar>(Point(1, 1)) <<endl;    cout << "1000, 1000 " <<img.type() << endl;

直接cout img.at()的值显示为空
改正:

cout << (int)img.at<uchar>(Point(1, 1)) <<endl;;

原因:img.at返回的是uchar类型,其值为0~255,需转为int值才是我们要的像素值。
另,关于img.type()输出为数字的原因,见我另一篇博文OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?

4.程序.exe以退出,返回值为 -1073741701 (0xc000007b)
或是:应用程序无法正常启动 (0xc000007b),请单击确定关闭程序。
这里写图片描述

解决方案:环境变量Path中必须同时加上x86和x64的bin文件目录

0 0