利用OpenCV鼠标控制窗口大小
来源:互联网 发布:编程用什么配置的电脑 编辑:程序博客网 时间:2024/05/16 12:01
功能程序:使用鼠标控制三个窗口的放大与缩小。
在此不附上运行结果效果图,若需体验其效果如何,可以自己动手copy参考代码,运行试试一下看。
参考程序如下所示:
#include <opencv2/opencv.hpp>using namespace std ;using namespace cv ;IplImage *vis_image ;//可见光图片IplImage *ir_image ;//红外光图片IplImage *imagesum ;//融合图片IplImage *m_display=cvCreateImage(cvSize(1080,600),IPL_DEPTH_8U,3);//整个窗口IplImage *temp_display=cvCreateImage(cvSize(720,560),IPL_DEPTH_8U,3);//左侧融合窗口IplImage *temp1_display=cvCreateImage(cvSize(360,280),IPL_DEPTH_8U,3);//右上可见光窗口IplImage *temp2_display=cvCreateImage(cvSize(360,280),IPL_DEPTH_8U,3);//右下红外窗口IplImage *large_display = cvCreateImage(cvSize(1080,560),IPL_DEPTH_8U,3);//大窗口显示一个图片CvRect rectsum=cvRect(0,0,720,560);//左侧融合窗口区域CvRect rect1=cvRect(720,0,360,280);//右上可见光区域CvRect rect2=cvRect(720,280,360,280);//右下红外光区域CvRect rectLarge = cvRect(0 , 0 , 1080 , 560) ;void cvshowFusion(){cvResize(imagesum,large_display,CV_INTER_LINEAR);cvSetImageROI(m_display,rectLarge);cvCopy(large_display,m_display);cvResetImageROI(m_display);}void cvshowVison(){cvResize(vis_image,large_display,CV_INTER_LINEAR);cvSetImageROI(m_display,rectLarge);cvCopy(large_display,m_display);cvResetImageROI(m_display);}void cvshowRed(){cvResize(ir_image,large_display,CV_INTER_LINEAR);cvSetImageROI(m_display,rectLarge);cvCopy(large_display,m_display);cvResetImageROI(m_display);}void cvshowThreeImage( ){cvResize(imagesum,temp_display,CV_INTER_LINEAR);cvResize(vis_image,temp1_display,CV_INTER_LINEAR);cvResize(ir_image, temp2_display, CV_INTER_LINEAR);cvSetImageROI(m_display,rectsum);cvCopy(temp_display,m_display);cvResetImageROI(m_display);cvSetImageROI(m_display,rect1);cvCopy(temp1_display,m_display);cvResetImageROI(m_display);cvSetImageROI(m_display,rect2);cvCopy(temp2_display,m_display);cvResetImageROI(m_display);cvRectangle(m_display,cvPoint(1,1),cvPoint(719,559),CV_RGB(100,255,100), 1);cvRectangle(m_display,cvPoint(721,1),cvPoint(1079,279),CV_RGB(100,255,100), 1);cvRectangle(m_display,cvPoint(721,281),cvPoint(1079,559),CV_RGB(100,255,100), 1);}void cvprocess0(int x , int y , int &flag){//三个窗口下点击int id ;if(x > 0 && x < 720)id = 0 ;else if(y > 0 && y < 280) id = 1;else id = 2;switch (id){case 0://点击融合图像cvshowFusion() ;cvShowImage("fusion" , m_display) ;flag = 1 ;break;case 1://点击可见光图像cvshowVison() ;cvShowImage("fusion" , m_display) ;flag = 2 ;break;case 2://点击红外光图像cvshowRed() ;cvShowImage("fusion" , m_display) ;flag = 3 ;break;default:break;}}void cvprocess1(int x , int y , int &flag){cvshowThreeImage() ;cvShowImage("fusion" , m_display) ;flag = 0 ;}void onMouse(int Event , int x , int y , int flags , void *param){int &ID = (*((int *)param)) ;switch(Event){case CV_EVENT_LBUTTONDBLCLK://左键双击switch (ID){case 0://三个窗口下点击cvprocess0(x , y , ID) ;break;default://其他单窗口下点击cvprocess1(x , y , ID) ;break;}break;default:break;}}int main(int argc, char *argv[]){int flag = 0 ;//flag = 0 ;表示显示三个子窗口,flag = 1 ,放大显示融合窗口 , //flag = 2 ,放大显示可见光窗口,flag = 3 放大显示红外光窗口//CvCapture vison ,red , fusion ;cvNamedWindow("fusion") ;CvCapture *vison = cvCaptureFromFile("01.AVI") ;CvCapture *redLight = cvCaptureFromFile("02.AVI") ;CvCapture *fusion = cvCaptureFromFile("03.AVI") ;while((vis_image = cvQueryFrame(vison)) && (ir_image = cvQueryFrame(redLight)) && (imagesum = cvQueryFrame(fusion))){// vis_image = cvLoadImage("1.jpg");//可见光图片// ir_image = cvLoadImage("2.jpg");//红外光图片// imagesum = cvLoadImage("3.jpg");//融合图片if(0 == flag)cvshowThreeImage() ;else if(1 == flag)cvshowFusion() ;else if(2 == flag)cvshowVison() ;else cvshowRed() ;cvShowImage("fusion" , m_display) ;cvSetMouseCallback("fusion" , onMouse , &flag) ; int key = cvWaitKey(1) ;if(key >= 0)break ;}//cvWaitKey() ;return 0 ;}
0 0
- 利用OpenCV鼠标控制窗口大小
- 利用OpenCV鼠标控制窗口大小
- OpenCV鼠标控制窗口大小(使用1.0vison)
- Qt5 鼠标滚轮控制窗口大小
- opencv--用鼠标动态改变显示图像窗口大小
- opencv窗口鼠标绘图
- 三,窗口大小控制
- 窗口大小控制MINMAXINFO
- 窗口大小控制MINMAXINFO
- 控制窗口大小
- 窗口大小控制MINMAXINFO
- 自定义鼠标修改窗口大小
- 利用wmctrl控制窗口
- opencv改变imshow窗口大小
- OpenCV来控制鼠标移动
- opencv显示大图--利用鼠标在固定窗口内显示大图
- 利用opencv进行鼠标绘图
- Opencv改变imshow窗口大小,窗口位置
- MVC模式在游戏开发的应用
- 关闭SSD(固态硬盘)节能功能 提搞SSD性能
- POJ2065_Testing the CATCHER_DP
- hdu 1003(最大连续子序列和)
- Android记事本开发
- 利用OpenCV鼠标控制窗口大小
- 解决方案~Microsoft Security Client OOBE 程序错误
- C++ STL inner_product
- POJ1860_钉子小球_DP
- 排序算法之二-选择排序和插入排序
- 佛學與編程 (楞嚴經)
- POJ1157_LITTLE SHOP OF FLOWERS_DP
- 利用word2vec对关键词进行聚类
- Linux下USB转串口驱动