1
votes

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?

4
Sometimes, I also get the following error message: Error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'tonnerrian
Did it even get to the first line of main()? If so, how far down did it get?Martin James
It does. It opens the namedWindow as well, and waits for the 1 s, before providing the memory exception.tonnerrian

4 Answers

4
votes

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
2
votes

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)

0
votes

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
-1
votes

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