未处理的异常Microsoft C ++异常:cv ::内存位置的异常

时间:2014-08-31 00:21:53

标签: c++ windows visual-studio-2010 opencv

我刚开始使用OpenCV。我下载了OpenCV 2.4.9,并安装了MSVS 2010.我的Windows是X64。我按照以下步骤操作:

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

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

℃。 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;
}

要收到错误:

  

BTP1.exe中0x76d2b727处的未处理异常:Microsoft C ++异常:cv ::内存位置0x003af414的异常

我认为这可能是因为X64和x86不匹配。在更改条目时。到PATH = C:\ opencv \ build \ x64 \ vc10 \ bin和c。到C:\ opencv \ build \ x64 \ vc10 \ lib,我收到以下错误:

  

应用程序无法正确启动(0xc000007b)。单击“确定”关闭应用程序。

有关如何解决此问题的任何提示?

4 个答案:

答案 0 :(得分:3)

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

附加依赖项存在问题。没有添加相同的Debug版本。 (XYZ249d.lib)

答案 1 :(得分:2)

这可能是因为您尝试显示的图像为空,可能是因为图像不在右侧文件夹中。要确认这一点,请将代码更改为

#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

答案 2 :(得分:0)

要添加到其他答案中,通常是在将彩色图像传递到需要灰度图像(即单通道)的工具中时发生的。

您可以使用以下代码将其转换为灰度:

cv::Mat img_gray;
cv::cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);

您可以使用以下代码提取并合并各个颜色通道:

cv::Mat img_bgr[3];
cv::split(img_color, img_bgr);
//Note: OpenCV uses BGR color order
//img_bgr[0] = blue channel
//img_bgr[1] = green channel
//img_bgr[2] = red channel
cv::Mat img_gray = img_bgr[2] - img_bgr[1];  //laser line extraction is typically red channel minus green channel

答案 3 :(得分:-1)

我有一个类似的问题,我只需要提供图像文件的路径 例如 - D:\ image.png