title: Can OpenCV be developed using C++ and C together
body: <p>Can OpenCV be developed  using  C++ and C together? Following is the program where i meet this problem.It is coded with C and works well.But if I use </p>
  
  <pre><code>cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
  cv::imshow("save",saveImage);
  </code></pre>
  
  <p>to replace </p>
  
  <pre><code>IplImage* saveImge =cvLoadImage("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
  cvShowImage("saveimage",saveImge);
  </code></pre>
  
  <p>I met this:</p>
  
  <p><strong>Unhandled exception at 0x75709673 in TaskDemo.exe: Microsoft C++ exception: cv::Exception at memory location 0x0039ea0c..</strong></p>
  
  <p>Following is the whole program. Hope anyone could help me .Thanks very much</p>
  
  <pre><code>#include&lt;opencv/cv.h&gt;
  #include&lt;opencv/highgui.h&gt;
  #include "opencv2/highgui/highgui.hpp"
  #include "opencv2/imgproc/imgproc.hpp"
  #include "opencv2/video/tracking.hpp"
  
  
  #include &lt;iostream&gt;
  #include &lt;ctype.h&gt;
  
  CvPoint pt1 = cvPoint(0,0);
  CvPoint pt2 = cvPoint(0,0);
  bool is_selecting = false;
  
  void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param)
  {
  switch(mouseEvent)
  {
  case CV_EVENT_LBUTTONDOWN:
      pt1 = cvPoint(x,y);
      pt2 = cvPoint(x,y);
      is_selecting = true;
      break;
  case CV_EVENT_MOUSEMOVE:
      if(is_selecting)
          pt2 = cvPoint(x,y);
      break;
  case CV_EVENT_LBUTTONUP:
      pt2 = cvPoint(x,y);
      is_selecting = false;
      break;
  }
  return;
   }
  
  int main(int argc,char* argv[])
  {
  char img_path[80] = "D:\\opencvStudy\\pic\\boldt.jpg";
  char save_path[80] = "save.jpg";
  char* window = "img";
  
  IplImage* img = cvLoadImage(img_path);  
  IplImage* img_show = cvCloneImage(img);
  
  cvNamedWindow(window,CV_WINDOW_AUTOSIZE);
  cvSetMouseCallback(window,cvMouseCallback);
  
  char text[80];
  CvFont font;
  cvInitFont(&amp;font,CV_FONT_HERSHEY_PLAIN,1.0,1.0);
  while(true)
  {
      cvCopy(img,img_show);
      cvRectangle(img_show,pt1,pt2,cvScalar(255,255,255));
      sprintf(text,"roi = cvRect(%d,%d,%d,%d)",pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
      cvPutText(img_show,text,cvPoint(10,20),&amp;font,cvScalar(0,0,255));
  
      cvShowImage(window,img_show);
      char key = cvWaitKey(10);
      if (key='r')
      {
          cvSetImageROI(img,cvRect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y)));
          cvSaveImage(save_path,img);
          cvResetImageROI(img);
          IplImage* saveImge = cvLoadImage("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
  
          cvShowImage("saveimage",saveImge);
          //cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
          //cv::imshow("save",saveImage);
      }
      else if(key==27)
          break;
  }
  cvReleaseImage(&amp;img);
  cvReleaseImage(&amp;img_show);
  return 0;
  </code></pre>
  
  <p>}  </p>
  
  <p><strong>Update</strong></p>
  
  <pre><code>#include "opencv2/highgui/highgui.hpp"
  #include "opencv2/core/core.hpp"
  #include &lt;iostream&gt;
  #include &lt;ctype.h&gt;
  
  using namespace std;
  using namespace cv;
  cv::Point pt1=Point(0,0);
  cv::Point pt2=Point(0,0);
  bool is_selecting=false;
  
  static void onMouse(int mouseEvent,int x,int y,int flags,void* param)
  {
  switch(mouseEvent)
  {
  case CV_EVENT_LBUTTONDOWN://CV_EVENT_LBUTTONDOWN
      pt1 = Point(x,y);
      pt2 = Point(x,y);
      is_selecting = true;
      break;
  case CV_EVENT_MOUSEMOVE:
      if(is_selecting)
          pt2 = Point(x,y);
      break;
  case CV_EVENT_LBUTTONUP:
      pt2 = Point(x,y);
      is_selecting = false;
      break;
  }
  }
  
  int main()
  {
  cv::Mat img=cv::imread("D:\\opencvStudy\\pic\\boldt.jpg");
  cv::Mat img_show=img.clone();
  
  cv::namedWindow("Task2",0);
  cv::setMouseCallback("Task2",onMouse,0);
  
  char text[80];
  while(true)
  {
      img.copyTo(img_show);
      cv::rectangle(img_show,pt1,pt2,cv::Scalar(255,255,255));
      sprintf(text,"roi = cvRect(%d,%d,%d,%d)",pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y));
      cv::putText(img_show,text,cvPoint(10,20),10,10,Scalar(0,0,255));
      cv::imshow("Task2",img_show);
      char key=cv::waitKey(10);
      if (key='r')
      {
          cv::Mat save=img(cv::Rect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y)));
          cv::imwrite("save.jpg",save);
          cv::Mat saveImage=cv::imread("D:\\opencvStudy\\opencv_test\\TaskDemo\\TaskDemo\\save.jpg");
          cv::imshow("save",saveImage);
      }
      else if(key==27)
          break;
  }
  return 0;
  </code></pre>
  
  <p>}</p>