Unhandled exception Microsoft C++ exception: cv::Exception at memory location

1

I just started with OpenCV. I downloaded OpenCV 2.4.9, and installed MSVS 2010. My Windows is X64. I followed the following steps:

a. Under Configuration Properties, click Debugging -> Environment and copy paste: PATH=C:\opencv\build\x86\vc10\bin

b. VC++ Directories -> Include directories and add the entries: C:\opencv\build\include

c. VC++ Directories -> Library directories and add the entries: C:\opencv\build\x86\vc10\lib

d. Linker -> Input -> Additional Dependencies and add the following:

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;

I ran the following code:

#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;
}

To get the error:

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

I figured this might be because of the X64 and x86 mismatch. On changing the entries in a. to PATH=C:\opencv\build\ x64 \vc10\bin and in c. to C:\opencv\build\ x64 \vc10\lib, I get the following error:

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

Any tips on how I can get over this issue?

c++
windows
visual-studio-2010
opencv
asked on Stack Overflow Aug 31, 2014 by tonnerrian • edited Aug 31, 2014 by tonnerrian

4 Answers

4

This is probably happening because the image you are trying to display is empty, perhaps because the image isn't in the right folder. To confirm this, change your code to

#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
answered on Stack Overflow Aug 31, 2014 by Bull
2

Resolved the problem. On some tinkering, I found that the program was running in the Release mode, and not the Debug mode.

It was a problem with the Additional Dependencies. Did not add the Debug versions of the same. (XYZ249d.lib)

answered on Stack Overflow Sep 1, 2014 by tonnerrian
0

To add to the other answers, this also commonly occurs if you pass a color image into a tool that requires a grayscale image (ie single channel).

You can convert it to grayscale using the following code:

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

You can extract and combine individual color channels using the following code:

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
answered on Stack Overflow Aug 31, 2020 by VoteCoffee
-1

I had a similar problem, I just had to give the path of the image file for example - D:\image.png

answered on Stack Overflow Jul 25, 2020 by Tathagat

User contributions licensed under CC BY-SA 3.0