我终于设法让opencv 2.3.1与eclipse,mingw和32位XP一起工作。当everzthing工作时我会提出一个howto,因为我找不到这个工具链。
麻烦的是,任何在窗口中显示结果的尝试都会导致未处理的异常。图像保存得很好,我能够在它们上运行Sobel内核,所以其他一切看起来都很好。调用namedWindow时似乎崩溃了。
我包含libopencv_core231,libopencv_highgui231,libopencv_imgproc231和libopencv_legacy231以及链接器。
以下是代码:
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
int main(int argc, char **argv)
{
std::cout<<"Hello"<<std::endl;
//Create image
Mat lena, lenasobel;
//Load lena image
lena = imread("C:\\lena.jpeg");
if(lena.data)
std::cout<<"File has "<<lena.cols<<" rows and "<<lena.rows<<" columns. "<<lena.channels()<<" channels."<<std::endl;
if(!lena.data)
std::cout<<"File Not Read."<<std::endl;
lenasobel=lena.clone();
Sobel(lena,lenasobel,lenasobel.depth(),1,1,3);
std::vector<int> jpg_type;
jpg_type.push_back(100);
jpg_type.push_back(CV_IMWRITE_JPEG_QUALITY);
imwrite("C:\\lenaout.jpeg",lenasobel,jpg_type);
//Save works!
namedWindow( "lena" , CV_WINDOW_AUTOSIZE);
imshow( "lena" ,lena);
return 0;
}
有没有人有任何想法?我不知道下一步该做什么!
答案 0 :(得分:3)
这可能是由于这个bug一直悬而未决。我实际上必须设置BUILD_TYPE=Debug
并禁用所有SSE优化以使OpenCV与Eclipse + MinGW一起使用。
答案 1 :(得分:0)
您无需调用namedWindow。无论如何,当你调用imshow时它会被创建。
另外,使用lena.empty()
检查lena是否在内存中正确。这是一个很好的做法,有时lena.data可能是一个陈旧的指针,因为引用计数(例如,如果你打开大规模的优化......然后你将无法识别它,它将正常工作只< / em>在调试模式下......)。