zoukankan      html  css  js  c++  java
  • 《学习OpenCV》练习题第四章第三题a

      1 #include <highgui.h>
      2 #include <cv.h>
      3 #include "opencv_libs.h"
      4 
      5 #pragma comment (lib,"opencv_calib3d231d.lib")
      6 #pragma comment (lib,"opencv_contrib231d.lib")
      7 #pragma comment (lib,"opencv_core231d.lib")
      8 #pragma comment (lib,"opencv_features2d231d.lib")
      9 #pragma comment (lib,"opencv_flann231d.lib")
     10 #pragma comment (lib,"opencv_gpu231d.lib")
     11 #pragma comment (lib,"opencv_haartraining_engined.lib")
     12 #pragma comment (lib,"opencv_highgui231d.lib")
     13 #pragma comment (lib,"opencv_imgproc231d.lib")
     14 #pragma comment (lib,"opencv_legacy231d.lib")
     15 #pragma comment (lib,"opencv_ml231d.lib")
     16 #pragma comment (lib,"opencv_objdetect231d.lib")
     17 #pragma comment (lib,"opencv_ts231d.lib")
     18 #pragma comment (lib,"opencv_video231d.lib")
     19 
     20 /*
     21  *《学习OpenCV》第四章第三题a
     22  * 完成时间:22:17 3/30 星期六 2013
     23  */
     24 
     25 /* 矩形框 */
     26 CvRect rect;
     27 
     28 bool draw = false;   // 标记是否在画
     29 
     30 IplImage* img;
     31 IplImage * temp;
     32 IplImage * original;
     33 
     34 void draw_rect(IplImage* img, CvRect rect)
     35 {
     36     cvRectangle( img, 
     37         cvPoint( rect.x, rect.y ),
     38         cvPoint( rect.x + rect.width, rect.y + rect.height),
     39         cvScalar( 0x00, 0x00, 0xff) );
     40     printf("draw
    ");
     41 }
     42 
     43 // 鼠标回调函数
     44 void my_mouse_callback( int event, int x, int y, int flags, void* param)
     45 {
     46     IplImage* image = (IplImage*) param;
     47 
     48     switch( event )
     49     {
     50     case CV_EVENT_MOUSEMOVE:
     51         {
     52             if(draw)
     53             {
     54                 rect.width = x - rect.x;
     55                 rect.height = y - rect.y;
     56             }
     57         }
     58         break;
     59     case CV_EVENT_LBUTTONDOWN:
     60         {
     61             draw = true;
     62             rect = cvRect( x, y, 0, 0 );
     63         }
     64         break;
     65     case CV_EVENT_LBUTTONUP:
     66         {
     67             draw = false;
     68             if(rect.width < 0)
     69             {
     70                 rect.x += rect.width;
     71                 rect.width *= -1;
     72             }
     73             if(rect.height < 0)
     74             {
     75                 rect.y += rect.height;
     76                 rect.height *= -1;
     77             }
     78             // draw
     79             draw_rect(image, rect);
     80         }
     81         break;
     82         // 在右键按下时清除
     83     case CV_EVENT_RBUTTONDOWN:
     84         cvCopyImage(original, img);
     85         printf("clear.
    ");
     86         break;
     87     }
     88 }
     89 
     90 int main()
     91 {
     92     img = cvLoadImage( "lena.bmp", 1 );
     93 
     94     rect = cvRect( -1, -1, 0, 0);
     95     
     96     // 副本
     97     temp = cvCloneImage( img );
     98     original = cvCloneImage(img);
     99     
    100     cvNamedWindow("draw rect");
    101     cvSetMouseCallback("draw rect", my_mouse_callback, (void*)img);
    102 
    103     while(1)
    104     {
    105         cvCopyImage(img, temp);
    106 
    107         if(draw)
    108         {
    109             draw_rect( temp , rect );
    110         }
    111 
    112         cvShowImage( "draw rect", temp);
    113 
    114         if(cvWaitKey(15) == 27)
    115             break;
    116     }
    117     cvReleaseImage(&img);
    118     cvReleaseImage(&temp);
    119     cvReleaseImage(&original);
    120     cvDestroyAllWindows();
    121 
    122     return 0;
    123 }

    运行结果:

  • 相关阅读:
    学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
    机器学习 | 详解GBDT梯度提升树原理,看完再也不怕面试了
    Python | 面试的常客,经典的生产消费者模式
    LeetCode 89,因为题目晦涩而被点了1500+反对的搜索问题
    LeetCode 87,远看是字符串其实是搜索,你能做出来吗?
    Golang | Go语言多态的实现与interface使用
    pandas | DataFrame基础运算以及空值填充
    算法数据结构 | 只要30行代码,实现快速匹配字符串的KMP算法
    Mac上使用Docker安装SQLServer
    [翻译]ASP.NET Core在 .NET 5 Preview 7的更新
  • 原文地址:https://www.cnblogs.com/qdsclove/p/3351187.html
Copyright © 2011-2022 走看看