OpenCV滑鼠滑輪事件
1 #include <iostream> 2 #include <string> 3 #include <opencv2/opencv.hpp> 4 5 using namespace std; 6 using namespace cv; 7 8 float scale=1.0; 9 10 void zoomInAndOut(const float scale, const Mat srcImg, Mat &dstImg) 11 { 12 Mat M=Mat::eye(3,3,CV_32FC1);13 int imgHeight=srcImg.rows; 14 int imgWidth=srcImg.cols; 15 16 uchar* pSrcData = (uchar*)srcImg.data; 17 uchar* pDstData = (uchar*)dstImg.data; 18 19 Point2f center(imgWidth / 2.0, imgHeight / 2.0); 20 //計算仿射矩陣 21 M.at<float>(0, 0) = scale; 22 M.at<float>(0, 2) = (1 - scale)*center.x; 23 M.at<float>(1, 1) = scale; 24 M.at<float>(1, 2) = (1 - scale)*center.y; 25 26 float a11 = M.at<float>(0, 0); 27 float a12 = M.at<float>(0, 1); 28 float a13 = M.at<float>(0, 2); 29 float a21 = M.at<float>(1, 0); 30 float a22 = M.at<float>(1, 1); 31 float a23 = M.at<float>(1, 2); 32 float a31 = M.at<float>(2, 0); 33 float a32 = M.at<float>(2, 1); 34 float a33 = M.at<float>(2, 2); 35 36 float bx = a11*a22 - a21*a12; 37 float by = a12*a21 - a11*a22; 38 if ( abs(bx) > 1e-3 && abs(by) > 1e-3) 39 { 40 bx = 1.0 / bx; 41 by = 1.0 / by; 42 float cx = a13*a22 - a23*a12; 43 float cy = a13*a21 - a23*a11; 44 45 for (int j =0; j < imgHeight; j++) 46 { 47 for (int i = 0; i < imgWidth; i++) 48 { 49 float u = (a22*i - a12*j - cx) *bx; 50 float v = (a21*i - a11*j - cy) *by; 51 52 int u0 = floor(u); 53 int v0 = floor(v); 54 int u1 = floor(u0 + 1); 55 int v1 = floor(v0 + 1); 56 if (u0 >= 0 && v0 >= 0 && u1 < imgWidth && v1 < imgHeight) 57 { 58 float dx = u - u0; 59 float dy = v - v0; 60 float weight1 = (1 - dx)*(1 - dy); 61 float weight2 = dx*(1 - dy); 62 float weight3 = (1 - dx)*dy; 63 float weight4 = dx*dy; 64 65 for (int k=0; k<srcImg.channels(); k++) 66 { 67 pDstData[j*imgWidth * 3 + i * 3 + k] = weight1*pSrcData[v0*imgWidth * 3 + u0 * 3 + k] + 68 weight2*pSrcData[v0*imgWidth * 3 + u1 * 3 + k] + 69 weight3*pSrcData[v1*imgWidth * 3 + u0 * 3 + k] + 70 weight4*pSrcData[v1*imgWidth * 3 + u1 * 3 + k]; 71 } 72 } 73 else 74 { 75 for (int k=0; k<srcImg.channels(); k++) 76 { 77 pDstData[j*imgWidth * 3 + i * 3 + k] = 0; 78 } 79 } 80 } 81 } 82 } 83 } 84 85 void onMouse(int event, int x, int y, int flags, void* ) 86 { 87 double value; 88 float step=0.02; 89 switch (event) 90 { 91 case CV_EVENT_MOUSEWHEEL: 92 value = getMouseWheelDelta(flags); 93 if (value>0) 94 scale +=step; 95 else if(value<0) 96 scale -=step; 97 break; 98 default: 99 break; 100 } 101 } 102 103 void main() 104 { 105 string imgPath="data/source_images/"; 106 Mat srcImg = imread(imgPath+"moon.jpg"); 107 pyrDown(srcImg, srcImg); 108 pyrDown(srcImg, srcImg); 109 110 Mat dstImg = srcImg.clone(); 111 dstImg.setTo(0); 112 113 string windowName="showImg"; 114 namedWindow(windowName); 115 imshow(windowName, srcImg); 116 waitKey(10); 117 118 setMouseCallback(windowName, onMouse, NULL); 119 float scaleMin=0.5; 120 float scaleMax=2; 121 while (true) 122 { 123 scale = (scale<scaleMin)? (scaleMin): scale; 124 scale = (scale>scaleMax)? (scaleMax): scale; 125 zoomInAndOut(scale, srcImg, dstImg); 126 imshow(windowName, dstImg); 127 waitKey(10); 128 } 129 }
相關推薦
OpenCV滑鼠滑輪事件
1 #include <iostream> 2 #include <string> 3 #include <opencv2/opencv.hpp> 4 5 using namespace std; 6 using namespace cv;
opencv 滑鼠事件 setMouseCallback 心得
最近兩天學習了一下opencv中的滑鼠事件函式,感覺網上的體會不是特別詳盡,把自己呼叫這個函式的體會寫一下,方便以後看的時候整理思路。 一、介紹 在opencv中,對滑鼠事件 setMouseCallback 的定義是 c++: CV_EXPORTS void
opencv 滑鼠事件
import cv2 as cv events = [i for i in dir(cv) if 'EVENT' in i] print( events ) # 列印所有的滑鼠事件 import n
瀏覽器滑塊、滑鼠事件、滑鼠滑輪、鍵盤事件詳細說明
滑鼠滑輪 必須是在 mousewheel 事件中 註冊事件 window.addEventListener(“mousewheel ”,function(){}); event.deltaY 獲取滑輪沒一格滑動的畫素,正負表示變化趨勢,正增加 event.whee
OpenCV之滑鼠響應事件
用滑鼠畫框框。。 #include <opencv2/opencv.hpp> #include <opencv2/opencv_modules.hpp> #include <opencv2/highgui/highgui.hpp&
鼠標滑輪事件QWheelEvent
發出 deb void strong del wheel str pan oid 一般鼠標滑輪事件會發出信號,參數是QWheelEvent,只需要新建槽函數,QWheelEvent作為參數。 void myMouseWheelEvent(QWheelEvent* ev
OpenCV滑鼠框選區域 --源程式
OpenCV滑鼠框選區域 --源程式 滑鼠框選區域 模板1: #include
onmousewheel滑鼠滾輪事件繫結的相容性問題
滾輪事件是不同瀏覽器會有一點點區別,一個像Firefox使用DOMMouseScroll ,ff也可以使用addEventListener方法繫結DomMouseScroll事件,其他的瀏覽器滾輪事件使用mousewheel,下面我來給大傢俱體介紹。 Firefox使用DOMMouseScrol
監聽滑鼠滾輪事件
js: //相容性寫法,該函式也是網上別人寫的,不過找不到出處了,蠻好的,所有我也沒有必要修改了 //判斷滑鼠滾輪滾動方向 if (window.addEventListener)//FF,火狐瀏覽器會識別該方法 window.addEventListener('DOMMouseScroll', w
opencv 滑鼠操作 setMouseCallback
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 網上有很多關於setMouseCallback的引數列表和使用方法,但是都是藉助全域性變數來使用的。並且有人說函式形參沒有用。這裡使用了opencv的兩個引數來實現函式形參的資料傳遞。 OpenCV中的滑鼠響應的函式是
vue中判斷 滑鼠滾輪事件 / 方向 / 向上或向下
html <div id="head"> </div> js中 <script> export default { data(){ return{
js滑鼠跟隨事件及位置獲取
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <sc
jQuery fullpage.js 全屏滾動外掛取消滑鼠滾動事件,點選選單欄定位顯示頁面。
問題:專案中遇到一個頁面,使用了全屏滾動外掛,如下有4屏畫面。使用了 fullpage.js,現在想要取消通過滑鼠滑輪滾動來定位頁面的功能,只通過點選左側選單欄來實現的定位頁面。 (此處前提條件是,原來的滑鼠事件有效,同時點選左側選單欄也能實現定位de)
滑鼠操作事件,擷取攝像頭視訊中區域,圖片預處理,識別數字
通過回撥函式擷取攝像頭視訊感興趣區域(儀器數字區域),並進行預處理,然後識別,程式碼如下 效果圖如下 //滑鼠操作事件,擷取攝像頭視訊中區域,識別圖片 #include <opencv2/core/core.hpp> #include <openc
做UI最全的滑鼠鍵盤事件!
在使用 Selenium WebDriver 做自動化測試的時候,會經常模擬滑鼠和鍵盤的一些行為。比如使用滑鼠單擊、雙擊、右擊、拖拽等動作;或者鍵盤輸入、快捷鍵使用、組合鍵使用等模擬鍵盤的操作。在 WebDeriver 中,有一個專門的類來負責實現這些測試場景,那就是Acti
給列表裡的 imge 設定滑鼠經過事件
<ul> <li><img src="1.jpg" onmouseover="changeColor(this)"></li> <li><img src="2.jpg" onmouseover="changeC
[前端] js滑鼠停留事件
在寫某個網頁作業時,要用到這個基本技能,就是滑鼠放到某一選項上變個色,移開後又變回來。 這個在網頁中很常見,實現也很簡單,寫一個小的例子,放在這裡方便以後作為模板用。
滑鼠滾輪事件及其相容
滑鼠滾輪事件:1,相容火狐瀏覽器,在火狐瀏覽器中用到了addEventListener if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,fa
【PyQt5-Qt Designer】滑鼠+鍵盤事件
重定義滑鼠響應+鍵盤響應事件 一,每個事件都被封裝成相應的類: pyqt中,每個事件型別都被封裝成相應的事件類,如滑鼠事件為QMouseEvent,鍵盤事件為QKeyEvent等。而它們的基類是QEvent。 二,基類QEvent的幾個重要方法: accept() 表示事件已處理,不需要向父視窗傳播
滑鼠滑輪將物體放大縮小
滑鼠滑輪將物體放大縮小 哈嘍!又來給大家分享程式碼嘍,今天給大家分享一下,滑鼠滑輪滑動將物體放大縮小,我用了兩種方法,兩種方法的效果不一樣,好了下面為大家演示一下兩種效果的不同以及程式碼: 1.第一種效果演示,這個是物體隨著滑輪的移動發生變化,變化的物體哦! 程式碼如下: pu