2014-08-31 179 views
1

我刚刚开始使用OpenCV。我下载了OpenCV 2.4.9,并安装了MSVS 2010.我的Windows是X64。我遵循以下步骤:未处理的异常Microsoft C++异常:cv ::内存位置异常

a。在配置属性下,单击调试 - >环境并复制粘贴:PATH = C:\ opencv \ build \ x86 \ vc10 \ bin

b。 VC++目录 - >包含目录并添加条目:C:\ opencv \ build \ include

c。 VC++目录 - >库目录并添加条目:C:\ opencv \ build \ x86 \ vc10 \ lib

d。链接器 - >输入 - >附加依赖,并添加以下内容:

opencv_calib3d249.lib;opencv_contrib249.lib;opencv_core249.lib;opencv_features2d249.lib;opencv_flann249.lib;opencv_gpu249.lib;opencv_nonfree249.lib;opencv_highgui249.lib;opencv_imgproc249.lib;opencv_legacy249.lib;opencv_ml249.lib;opencv_objdetect249.lib;opencv_ts249.lib;opencv_video249.lib;

我跑到下面的代码:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
int main() { 
     // read an image 
     cv::Mat image= cv::imread("img.jpg"); 
     // create image window named "My Image" 
     cv::namedWindow("My Image"); 
     cv::waitKey(1000); 
     // show the image on window 
     cv::imshow("My Image", image); 
     // wait key for 5000 ms 
     cv::waitKey(50); 
     return 1; 
} 

为了得到错误:

Unhandled exception at 0x76d2b727 in BTP1.exe: Microsoft C++ exception: cv::Exception at memory location 0x003af414

我想这可能是由于X64和x86不匹配。关于更改a中的条目。到PATH = C:\ opencv \ build \ x64 \ vc10 \ bin并在c。到C:\ OpenCV的\建设\ \ VC10 \ lib中,我得到以下错误:

The application was unable to start correctly (0xc000007b). Click OK to close the application.

我如何能渡过这个问题有什么建议?

+0

有时,我也会收到以下错误消息:**错误LNK1112:模块机器类型'x64'与目标机器类型'X86'冲突** – tonnerrian 2014-08-31 00:25:57

+0

它甚至到达主的第一行()?如果是这样,它得到了多少? – 2014-08-31 00:26:16

+0

它的确如此。它也会打开namedWindow,并在提供内存异常之前等待1秒。 – tonnerrian 2014-08-31 00:28:48

回答

1

这可能是因为您试图显示的图像为空,可能是因为图像不在正确的文件夹中。要确认此问题,请将您的代码更改为

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

#include <iostream> // std::cout 

int main() { 
    // read an image 
    cv::Mat image= cv::imread("img.jpg"); 

    // add the following lines 
    if(image.empty()) 
     std::cout << "failed to open img.jpg" << std::endl; 
    else 
     std::cout << "img.jpg loaded OK" << std::endl; 

    ... // the rest of your code 
3

解决了该问题。在一些修补程序中,我发现程序在Release模式下运行,而不是Debug模式。

这是附加依赖关系的问题。没有添加相同的Debug版本。 (XYZ249d.lib)