学习OpenCV课后题4.3

#include <cv.h>
#include <cvcam.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

CvRect g_rect;                //全局变量
bool  g_isdown;

void my_callback(int event, int x, int y, int flags, void* param);   //声明鼠标事件的回调函数

void high_light(IplImage *image,CvRect rect);        //将image图像的rect部分做加亮处理

 

void main()
{
 IplImage *orginal_image=cvLoadImage("1.jpg");
 assert(orginal_image!=NULL);           //载入图像

 IplImage *temp_image=cvCreateImage(cvGetSize(orginal_image),orginal_image->depth,orginal_image->nChannels);
 assert(temp_image!=NULL);            //创建临时图像

 cvNamedWindow("Show");             //创建窗口并指定其回调函数
 cvSetMouseCallback("Show",my_callback,(void*)temp_image);

 while (1)
 {
  cvCopyImage(orginal_image,temp_image);
  if (true==g_isdown)
  {        
   high_light(temp_image,g_rect);
  }
  else
  {
   cvCopyImage(orginal_image,temp_image);
   high_light(temp_image,g_rect);
  }

  cvShowImage("Show",temp_image);

  if (27==cvWaitKey(30))
  {
   break;
  }
  
 }

}


void my_callback(int event, int x, int y, int flags, void* param)
{
 IplImage *image=(IplImage*)(param);

 switch (event)
 {
 case CV_EVENT_LBUTTONDOWN :{
        g_isdown=true;
        g_rect=cvRect(x,y,0,0);
          }
 break;

 case CV_EVENT_MOUSEMOVE:{
       if (true==g_isdown)
       {
        g_rect.width=x-g_rect.x;
        g_rect.height=y-g_rect.y;
        
       }


       }
 break;

 case CV_EVENT_LBUTTONUP :{
        g_isdown=false;
        if (g_rect.width<0)
        {
         g_rect.x=g_rect.x+g_rect.width;
         g_rect.width*=-1;
        }

        if (g_rect.height<0)
        {
         g_rect.y=g_rect.y+g_rect.height;
         g_rect.height*=-1;
        }
        high_light(image,g_rect);

      //  printf("/n %d %d %d %d/n",g_rect.x,g_rect.y,g_rect.width,g_rect.height);

        }
 break;
 }
}

//将图像进行加亮处理

void high_light(IplImage *image,CvRect rect)
{

 assert(image!=NULL);

 for (int row=rect.y;row<rect.y+rect.height;row++)
 {
  uchar *ptr=(uchar*)(image->imageData+row*image->widthStep);
  for (int col=rect.x;col<rect.x+rect.width;col++)
  {
   ptr[col*3+1]=150;
  }
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值