opencv 函数(一)

来源:互联网 发布:c语言面向对象编程的书 编辑:程序博客网 时间:2024/06/04 00:32

1、图像叠加addWeighted

声明:

addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma,

                       OutputArray dst, int dtype = -1);

src1    //第一个原数组.
alpha  //第一个数组元素的权值 
src2    //第二个原数组 
beta   //第二个数组元素的权值 
dst     //输出数组 
gamma //添加的常数项。 
函数 addWeighted 计算两数组的加权值的和: 
dst(I)=src1(I)*alpha+src2(I)*beta+gamma

如:cv::addWeighted(image1,0.7,image2,0.9,0.,result);
说以说0.7和0.9分别代表两个图像在dst图像中占得比例,自定义,
后面的0只是起一个微调作用

[html] view plain copy
  1. Mat im=imread("2.jpg");  
  2.     Mat lo=imread("6.jpg");  
  3.     namedWindow("[2]op");  
  4.     imshow("[2]op",im);  
  5.     namedWindow("[3]op");  
  6.     imshow("[3]op",lo);  
[html] view plain copy
  1. Mat Roi,QQ;  
  2. Roi=im(Rect(200,10,150,230));  
  3. for(int i=0;i<Roi.rows;i++)  
  4.     for(int j=0;j<Roi.cols;j++)  
  5.         Roi.at<Vec3b>(i,j)=255;  
  6.   
  7.   
  8. QQ=lo(Rect(200,10,150,230));  
  9. addWeighted(Roi,0.5,QQ,0.3,0.,Roi);  
  10.   
  11.   
  12. namedWindow("[4]AP");  
  13. imshow("[4]AP",im);Mat im=imread("2.jpg");  

2、创建滑动条createTrackbar

声明:
int cvCreateTrackbar( const char* trackbar_name, const char* window_name,int* value, int count,                                                                 CvTrackbarCallback on_change );

trackbar_name 被创建的trackbar名字。

window_name 窗口名字,这个窗口将为被创建trackbar的父对象。

value 整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。无值时为NULL。

count 滑块位置的最大值。最小值一直是0。

on_change 每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。

被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。

定义:

[html] view plain copy
  1. <span style="font-size:14px;">int cv::createTrackbar(const String& trackbarName, const String& winName,  
  2.                    int* value, int count, TrackbarCallback callback,  
  3.                    void* userdata)  
  4. {  
  5.     return cvCreateTrackbar2(trackbarName.c_str(), winName.c_str(),  
  6.                              value, count, callback, userdata);  
  7. }</span>  

[html] view plain copy
  1. <span style="font-size:14px;">CV_IMPL int  
  2. cvCreateTrackbar2( const char* /*trackbar_name*/, const char* /*window_name*/,  
  3.                    int* /*val*/, int /*count*/, CvTrackbarCallback2 /*on_notify2*/,  
  4.                    void* /*userdata*/ )  
  5. {  
  6.     CV_NO_GUI_ERROR( "cvCreateTrackbar2" );  
  7.     return -1;  
  8. }</span>  

[html] view plain copy
  1. <span style="font-size:14px;">#ifndef CV_IMPL  
  2. #  define CV_IMPL CV_EXTERN_C  
  3. #endif</span>  
[html] view plain copy
  1. <span style="font-size:14px;">  
  2. </span>  
[html] view plain copy
  1. <span style="font-size:18px;">//在创建的窗体中创建一个滑动条控件  
  2. <span style="white-space: pre;">    </span>char TrackbarName[50];  
  3. <span style="white-space: pre;">    </span>sprintf( TrackbarName, "透明值 %d", g_nMaxAlphaValue );  
  4. </span>  
[html] view plain copy
  1. <span style="font-size:18px;">createTrackbar( TrackbarName, WINDOW_NAME,<span style="color:#ff0000;"> &g_nAlphaValueSlider</span>, g_nMaxAlphaValue,<span style="background-color: rgb(192, 192, 192);"> <span style="color:#000099;">on_Trackbar</span></span> );</span>  
[html] view plain copy
  1. <span style="font-size:18px;">//结果在回调函数中显示  
  2. <span style="white-space:pre">  </span><span style="background-color: rgb(153, 153, 153);">on_Trackbar</span>( g_nAlphaValueSlider, 0 );  
  3. </span>  
[html] view plain copy
  1. <span style="font-size:18px;">void <span style="background-color: rgb(192, 192, 192);">on_Trackbar</span>( int,<span style="color:#3333ff;"> void* </span>)  
  2. {  
  3. <span style="white-space:pre">  </span>//求出当前alpha值相对于最大值的比例  
  4. <span style="white-space:pre">  </span>g_dAlphaValue = (double) g_nAlphaValueSlider/g_nMaxAlphaValue ;  
  5. <span style="white-space:pre">  </span>//则beta值为1减去alpha值  
  6. <span style="white-space:pre">  </span>g_dBetaValue = ( 1.0 - g_dAlphaValue );  
  7.   
  8.   
  9. <span style="white-space:pre">  </span>//根据alpha和beta值进行线性混合  
  10. <span style="white-space:pre">  </span>addWeighted( g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);  
  11.   
  12.   
  13. <span style="white-space:pre">  </span>//显示效果图  
  14. <span style="white-space:pre">  </span>imshow( WINDOW_NAME, g_dstImage );  
  15. }</span>  

void 用在函数名前,表示没有返回值
用在函数参数列表中,表示没有形参
用在指针前,表示指针可以指向任何类型

3、鼠标操作setMouseCallback

声明:void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);

  • winname:窗口的名字
  • onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);
  •     userdate:传给回调函数的参数 
[html] view plain copy
  1. <span style="font-size:14px;">void cv::setMouseCallback( const String& windowName, MouseCallback onMouse, void* param)  
  2. {  
  3.     cvSetMouseCallback(windowName.c_str(), onMouse, param);  
  4. }</span>  


[html] view plain copy
  1. <span style="font-size:14px;">CV_IMPL void  
  2. cvSetMouseCallback( const char*, CvMouseCallback, void* )  
  3. {  
  4.     CV_NO_GUI_ERROR( "cvSetMouseCallback" );  
  5. }</span>  
[html] view plain copy
  1.   
[html] view plain copy
  1. <span style="font-size:18px;">setMouseCallback(WINDOW_NAME,<span style="color:#ff0000;">on_MouseHandle</span>,(void*)&srcImage);</span>  
//鼠标响应函数

[html] view plain copy
  1. <span style="font-size:14px;">void<span style="color:#ff0000;"> on_MouseHandle</span>(int event, int x, int y, int flags, void* param)  
  2. {  
  3.   
  4.   
  5.     Mat& image = *(cv::Mat*) param;  
  6.     switch( event)  
  7.     {  
  8.         //鼠标移动消息  
  9.     case EVENT_MOUSEMOVE:   
  10.         {  
  11.             if( g_bDrawingBox )//如果是否进行绘制的标识符为真,则记录下长和宽到RECT型变量中  
  12.             {  
  13.                 g_rectangle.width = x-g_rectangle.x;  
  14.                 g_rectangle.height = y-g_rectangle.y;  
  15.             }  
  16.         }  
  17.         break;  
  18.   
  19.   
  20.         //左键按下消息  
  21.     case EVENT_LBUTTONDOWN:   
  22.         {  
  23.             g_bDrawingBox = true;  
  24.             g_rectangle =Rect( x, y, 0, 0 );//记录起始点  
  25.         }  
  26.         break;  
  27.   
  28.   
  29.         //左键抬起消息  
  30.     case EVENT_LBUTTONUP:   
  31.         {  
  32.             g_bDrawingBox = false;//置标识符为false  
  33.             //对宽和高小于0的处理  
  34.             if( g_rectangle.width < 0 )  
  35.             {  
  36.                 g_rectangle.x += g_rectangle.width;  
  37.                 g_rectangle.width *= -1;  
  38.             }  
  39.   
  40.   
  41.             if( g_rectangle.height < 0 )   
  42.             {  
  43.                 g_rectangle.y += g_rectangle.height;  
  44.                 g_rectangle.height *= -1;  
  45.             }  
  46.             //调用函数进行绘制  
  47.             <span style="color:#ff0000;">DrawRectangle</span>( image, g_rectangle );  
  48.         }  
  49.         break;  
  50.   
  51.   
  52.     }  
  53. }</span>  
//描述:自定义的矩形绘制函数
[html] view plain copy
  1. <span style="font-size:18px;">void <span style="color:#ff0000;">DrawRectangle</span>( cv::Mat& img, cv::Rect box )  
  2. {  
  3.     cv::rectangle(img,<span style="color:#ff0000;">box.tl</span>(),<span style="color:#ff0000;">box.br</span>(),cv::Scalar(g_rng.uniform(0, 255), g_rng.uniform(0,255), g_rng.uniform(0,255)));//随机颜色  
  4. }</span>  
[html] view plain copy
  1. template<typename _Tp> inline  
  2. Point_<_Tp> Rect_<_Tp>::<span style="color:#ff0000;">tl()</span> const  
  3. {  
  4.     return Point_<_Tp>(x,y);  
  5. }  
[html] view plain copy
  1. template<typename _Tp> inline  
  2. Point_<_Tp> Rect_<_Tp>::<span style="color:#ff0000;">br</span>() const  
  3. {  
  4.     return Point_<_Tp>(x + width, y + height);  
  5. }  

  void on_Mouse(int event, int x, int y, int flags, void* param);
  • event是 CV_EVENT_*变量之一
  • x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系) 
  • flags是CV_EVENT_FLAG的组合, param是用户定义的传递到setMouseCallback函数调用的参数。
附event:

#define CV_EVENT_MOUSEMOVE         0

#define CV_EVENT_LBUTTONDOWN    1

#define CV_EVENT_RBUTTONDOWN    2

#define CV_EVENT_MBUTTONDOWN    3

#define CV_EVENT_LBUTTONUP           4

#define CV_EVENT_RBUTTONUP          5

#define CV_EVENT_MBUTTONUP          6

#define CV_EVENT_LBUTTONDBLCLK  7

#define CV_EVENT_RBUTTONDBLCLK  8

#define CV_EVENT_MBUTTONDBLCLK  9

 

#define CV_EVENT_FLAG_LBUTTON      1

#define CV_EVENT_FLAG_RBUTTON     2

#define CV_EVENT_FLAG_MBUTTON     4

#define CV_EVENT_FLAG_CTRLKEY      8

#define CV_EVENT_FLAG_SHIFTKEY    16

#define CV_EVENT_FLAG_ALTKEY         32


0 0
原创粉丝点击