Ask Your Question

Revision history [back]

working with opencv2.4.9, vs2008 express and windows xp,between these any compatibility problem

Hi guys,

From last fews im working on opencv. Initially i started with opencv 3.0.0, vs2008 express, and windowsxp so, while working with this i got exception at imwrite() and findcontours(). After some suggestion i went to opencv 2.4.9. Now my system opencv 2.4.9, vs2008 express and windowsxp then again im again getting exception but now at imread(),it is first function in my program so i decided this may any compatibility problem...!

mycode:

include <cxcore.h>

include <highgui.h>

include <string>

include <iostream>

include <cv.h>

include "opencv2/objdetect/objdetect.hpp"

include "opencv2/highgui/highgui.hpp"

include "opencv2/imgproc/imgproc.hpp"

include "opencv2/core/core.hpp"

include <iostream>

include <windows.h>

ifdef _CH_

pragma package <opencv>

endif

ifndef _EiC

include "cv.h"

include "highgui.h"

include "ml.h"

include <stdio.h>

include <stdlib.h>

include <ctype.h>

endif

using namespace std; using namespace cv;

int getContours() { cv::Mat img = cv::imread("equation.jpg", 0);//Here im getting exception

//Apply blur to smooth edges and use adapative thresholding cv::Size size(3,3); cv::GaussianBlur(img,img,size,0); adaptiveThreshold(img, img,255,CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY,75,10); cv::bitwise_not(img, img);

cv::Mat img2 = img.clone();

std::vector<cv::point> points; cv::Mat_<uchar>::iterator it = img.begin<uchar>(); cv::Mat_<uchar>::iterator end = img.end<uchar>(); for (; it != end; ++it) if (*it) points.push_back(it.pos());

cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));

double angle = box.angle; if (angle < -45.) angle += 90.;

cv::Point2f vertices[4]; box.points(vertices); for(int i = 0; i < 4; ++i) cv::line(img, vertices[i], vertices[(i + 1) % 4], cv::Scalar(255, 0, 0), 1, CV_AA);

cv::Mat rot_mat = cv::getRotationMatrix2D(box.center, angle, 1);

cv::Mat rotated; cv::warpAffine(img2, rotated, rot_mat, img.size(), cv::INTER_CUBIC);

cv::Size box_size = box.size; if (box.angle < -45.) std::swap(box_size.width, box_size.height); cv::Mat cropped;

cv::getRectSubPix(rotated, box_size, box.center, cropped); cv::imshow("Cropped", cropped); imwrite("example5.jpg",cropped);

    Mat cropped2=cropped.clone();

cvtColor(cropped2,cropped2,CV_GRAY2RGB);

Mat cropped3 = cropped.clone(); cvtColor(cropped3,cropped3,CV_GRAY2RGB);

vector<vector<point> > contours; vector<vec4i> hierarchy;

/// Find contours cv:: findContours( cropped, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_TC89_KCOS, Point(0, 0) );

/// Approximate contours to polygons + get bounding rects and circles vector<vector<point> > contours_poly( contours.size() ); vector<rect> boundRect( contours.size() ); vector<point2f>center( contours.size() ); vector<float>radius( contours.size() );

//Get poly contours for( int i = 0; i < contours.size(); i++ ) { approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true ); }

//Get only important contours, merge contours that are within another vector<vector<point> > validContours; for (int i=0;i<contours_poly.size();i++){< p="">

            Rect r = boundingRect(Mat(contours_poly[i]));
            if(r.area()<100)continue;
            bool inside = false;
            for(int j=0;j<contours_poly.size();j++){
                    if(j==i)continue;

                    Rect r2 = boundingRect(Mat(contours_poly[j]));
                    if(r2.area()<100||r2.area()<r.area())continue;
                    if(r.x>r2.x&&r.x+r.width<r2.x+r2.width&&
                            r.y>r2.y&&r.y+r.height<r2.y+r2.height){

                            inside = true;
                    }
            }
            if(inside)continue;
            validContours.push_back(contours_poly[i]);
    }


    //Get bounding rects
    for(int i=0;i<validContours.size();i++){
            boundRect[i] = boundingRect( Mat(validContours[i]) );
    }


    //Display

Scalar color = Scalar(0,255,0); for( int i = 0; i< validContours.size(); i++ ) { if(boundRect[i].area()<100)continue; drawContours( cropped2, validContours, i, color, 1, 8, vector<vec4i>(), 0, Point() ); rectangle( cropped2, boundRect[i].tl(), boundRect[i].br(),color, 2, 8, 0 ); }

//imwrite("example6.jpg",cropped2); imshow("Contours",cropped2);

//extractContours(cropped3,validContours);

cv::waitKey(0);

}

int main(void){

getContours();

}

Please any one suggest me, what im thinking is write or not.

tell me anything.

Thank you. it's gov...