国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形

這篇具有很好參考價(jià)值的文章主要介紹了C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

使用鼠標(biāo)圖像上畫(huà)出矩形

opencv中常用的除了TrackBar滑動(dòng)條事件,還有豐富的鼠標(biāo)事件,與TrackBar類(lèi)似,鼠標(biāo)事件也是使用回調(diào)函數(shù)判斷動(dòng)作的發(fā)生,并執(zhí)行相關(guān)的操作。整個(gè)行為與QT的信號(hào)與槽類(lèi)似。
在圖像中畫(huà)出矩形,需要使用setMouseCallback()和MouseCallback()函數(shù)。

本文使用的頭文件及命名空間:

#pragma once
#include <opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

設(shè)置鼠標(biāo)回調(diào)函數(shù):
C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形

winname :顯示圖像的窗口名
onMouse : 自定義的鼠標(biāo)回調(diào)函數(shù)
userdata : 輸入的無(wú)類(lèi)型指針參數(shù),即Mat圖像的地址

鼠標(biāo)回調(diào)函數(shù):取名可以不同,但是參數(shù)類(lèi)型與數(shù)目需要一致
C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形

event : 鼠標(biāo)事件中的某一種
x : 當(dāng)前鼠標(biāo)的位置的橫坐標(biāo)
y :當(dāng)前鼠標(biāo)的位置的縱坐標(biāo)
flags : 鼠標(biāo)事件標(biāo)志的某一種
userdata : 傳入的無(wú)類(lèi)型指針參數(shù)

鼠標(biāo)事件類(lèi)型:
C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形
測(cè)試代碼:

使用鼠標(biāo)在圖像上畫(huà)出矩形,需要記錄鼠標(biāo)按下的起始位置作為矩形的左上角。

//--------------------------【Opencv中的鼠標(biāo)點(diǎn)擊事件】----------------------------
//全局變量
//保存鼠標(biāo)按下的起始點(diǎn)
Point2i startP;

//聲明回調(diào)函數(shù)
void myMouseevent(int event, int x, int y, int flags, void* userdata) {
	
	//imshow("image show", *(Mat*)userdata);
	Mat dst= (*(Mat*)userdata).clone();
	//判斷左鍵按下,記錄起始點(diǎn)坐標(biāo)
	if (event == EVENT_LBUTTONDOWN) {
		startP.x = x;
		startP.y = y;
	}
	//鼠標(biāo)左鍵為按下?tīng)顟B(tài),顯示需要畫(huà)的矩形,只能畫(huà)出鼠標(biāo)左下角移動(dòng)的矩形
	if ( flags == EVENT_FLAG_LBUTTON) {
		//計(jì)算需畫(huà)的矩形
		Rect rect(startP.x, startP.y, x - startP.x, y - startP.y);
		//在圖像上畫(huà)出矩形
		rectangle(dst, rect, Scalar(0, 0, 250), 2,4);
		imshow("image show", dst);
	}
	//左鍵松開(kāi),在原圖像畫(huà)出矩形
	if (event == EVENT_LBUTTONUP ) {
		Rect rect(startP.x, startP.y, x - startP.x, y - startP.y);
		rectangle(*(Mat *)userdata, rect, Scalar(0, 0, 250), 2, 4);
		imshow("image show", *(Mat*)userdata);
	}
	
}

//鼠標(biāo)事件測(cè)試,在圖像上畫(huà)矩形。
void mouseEventTest() {
	Mat src = imread(path, 1);
	namedWindow("image show", WINDOW_AUTOSIZE);
	imshow("image show", src);
	setMouseCallback("image show", myMouseevent, &src);
	waitKey(0);
}

測(cè)試結(jié)果:
C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形
C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形

上述代碼,沒(méi)有做鼠標(biāo)移動(dòng)前后坐標(biāo)相對(duì)位置的判斷,即只有當(dāng)移動(dòng)后的位置的橫縱坐標(biāo)均大于等于移動(dòng)前時(shí),才可以畫(huà)出矩形。如果需要任意方向畫(huà)出矩形,則需在畫(huà)矩形部分添加判斷相對(duì)位置代碼。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-510130.html

到了這里,關(guān)于C++ opencv鼠標(biāo)事件,在圖像上畫(huà)矩形的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包