OpenCV鼠标修改图片透明度
生活随笔
收集整理的這篇文章主要介紹了
OpenCV鼠标修改图片透明度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近,Boss需要我研究OpenCV,實現用鼠標修改圖片的透明度,
具體情況是:
兩張圖片貼合在一起,其中一張圖片a的透明度是1(完全不透明),另一張圖片b的透明度是0(完全透明),鼠標點擊劃過的地方,將a的透明度修改為0,b的透明度修改為1,
下面的程序就是用于完成這個過程。
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream>using namespace cv; using namespace std;#define WINDOW_NAME "【演示窗口】" #define R 10void on_MouseHandle(int event, int x, int y, int flags, void* param);bool g_bDrawingBox = false;//是否進行繪制Mat image; Mat image2; Mat imageROI; // 定義一個Mat類型,用于存放,圖像的ROI Mat tem_imageROI;int main( ) {//載入圖片image = imread("images/1559.jpg");image2 = imread("images/1558.jpg");imageROI= image(Rect(0,0,image2.cols,image2.rows));// 將image2加到原圖上addWeighted(imageROI,1.0,image2,0.0,0.,imageROI);//顯示結果namedWindow(WINDOW_NAME);setMouseCallback(WINDOW_NAME,on_MouseHandle,(void*)&image);//程序主循環,當進行繪制的標識符為真時,進行繪制while(1){imshow( WINDOW_NAME, image );if( waitKey( 10 ) == 27 ) break;//按下ESC鍵,程序退出}return 0; }void on_MouseHandle(int event, int x, int y, int flags, void* param) {Mat& image = *(cv::Mat*) param;switch( event){//鼠標移動消息case EVENT_MOUSEMOVE: {if( g_bDrawingBox ){//根據x,y的位置動態修改區域大小int m = R;if(x-R<=0 || y-R<=0 || x+R>=image.cols || y+R>=image.rows){if(x-R*0.5<=0 || y-R*0.5<=0 || x+R*0.5>=image.cols || y+R*0.5>=image.rows){if(x-R*0.25<=0 || y-R*0.25<=0 || x+R*0.25>=image.cols || y+R*0.25>=image.rows){x = 0;y = 0;m = 0;}else{m = R*0.25;}}else{m = R*0.5;}}else{m = R;}tem_imageROI = image(Rect(x-m,y-m,2*m,2*m));addWeighted(tem_imageROI,0.0,image2(Rect(x-m,y-m,2*m,2*m)),1.0,0.,tem_imageROI);}}break;//左鍵按下消息case EVENT_LBUTTONDOWN: {g_bDrawingBox = true;}break;//左鍵抬起消息case EVENT_LBUTTONUP: {g_bDrawingBox = false;//置標識符為false}break;} }效果圖是這樣的:
總結
以上是生活随笔為你收集整理的OpenCV鼠标修改图片透明度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习简史
- 下一篇: 安全狗云原生安全能力守护中国联通安全发展