findcontours problem in vs2010
hi there
when i use findcontours function in vs2010, i get "access violation reading location... "error when i try to compile it, but when i compile same code in linux ubuntu it is run perfectly, is there any problem with opencv&vs2010?
here is the code:
#include "highgui.h"
#include "cv.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
Mat src; Mat src_gray;
int thresh = 100;
int max_thresh = 255;
RNG rng(12345);
/// Function header
void thresh_callback(int, void* );
/** @function main */
int main( )
{
/// Load source image and convert it to gray
src = imread( "lena.bmp",1 );
if ( src.empty() )
{
cerr << "you owe me one!" << endl;
return -1;
}
/// Convert image to gray and blur it
cvtColor( src, src_gray, CV_BGR2GRAY );
cvtColor( src, src_gray, CV_BGR2GRAY );
blur( src_gray, src_gray, Size(3,3) );
/// Create Window
char* source_window = "Source";
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh, thresh_callback );
thresh_callback( 0, 0 );
waitKey(0);
return(0);
}
void thresh_callback(int, void* )
{
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
/// Detect edges using canny
Canny( src_gray, canny_output, thresh, thresh*2, 3 );
/// Find contours
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Draw contours
Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
for( int i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
}
/// Show in a window
namedWindow( "Contours", CV_WINDOW_AUTOSIZE );
imshow( "Contours", drawing );
}
and the error is: Unhandled exception at 0x52b01f91 in test_test.exe: 0xC0000005: Access violation reading location 0x00000e1c.
the line that error occure:findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
project in Debug or Release mod, the error is still happening. and its nothing with finding image, check the code please.
image is load correctly, the problem is with findcontours.
#include "highgui.h"
#include "cv.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
Mat src; Mat src_gray;
int thresh = 100;
int max_thresh = 255;
RNG rng(12345);
/// Function header
void thresh_callback(int, void* );
/** @function main */
int main( )
{
/// Load source image and convert it to gray
src = imread( "lena.bmp",1 );
if ( src.empty() )
{
cerr << "you owe me one!" << endl;
return -1;
}
namedWindow( "input_img", CV_WINDOW_AUTOSIZE );
imshow( "input_img", src );
waitKey(0);
/// Convert image to gray and blur it
//cvtColor( src, src_gray, CV_BGR2GRAY );
//
//blur( src_gray, src_gray, Size(3,3) );
///// Create Window
//char* source_window = "Source";
//namedWindow( source_window, CV_WINDOW_AUTOSIZE );
//imshow( source_window, src );
//createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh, thresh_callback );
//thresh_callback( 0, 0 );
//waitKey(0);
return(0);
}
void thresh_callback(int, void* )
{
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
/// Detect edges using canny
Canny( src_gray, canny_output, thresh, thresh*2, 3 );
/// Find contours
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Draw contours
Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
for( int i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0 ...
Read the FAQ and edit your question. Give us more information if you do not want your topic to get closed... Error when trying to compile tells us nothing ...
yes, compilers behave different some times, so - demo code, please..
Is it in release or debug mode ? What is the line where the error occures ?
The guilty line is more Canny( src_gray, canny_output, thresh, thresh*2, 3 );. The green arrow point the next instruction to be executed.
Did you check what's in your src_gray at the begining of the "tresh_callback" ? Like an imshow to see if the matrix is ok. Maybe it can be the contours matrix that have to be initialized ? Take a look at the documentation :
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html
The output matrix is already initialized...
Contours matrix does not need initialization on my system :) So guess they don't need to be on his system either.