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

快速上手Opencv:HighGUI圖形用戶界面

這篇具有很好參考價(jià)值的文章主要介紹了快速上手Opencv:HighGUI圖形用戶界面。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.圖像的載入、顯示和輸出到文件

1.1 圖像的載入:imread()函數(shù)

Mat imread(const string &filename,int flags=1)

  • 第一個(gè)參數(shù):圖片路徑
  • 第二個(gè)參數(shù):載入標(biāo)識(shí),指定一個(gè)加載圖像的顏色類型。可以看到它自帶的默認(rèn)值為1

1.2 圖像的顯示:imshow()函數(shù)

void imshow(const string& winname InputArray mat)

  • 第一個(gè)參數(shù):填需要顯示的窗口標(biāo)識(shí)名稱
  • 第二個(gè)參數(shù):填需要顯示的圖像

1.3 創(chuàng)建窗口:namedWindow()函數(shù)

void namedWindow(const string &winname, int flags=WINDOW_AUTOSIZE)

  • 第一個(gè)參數(shù):窗口名稱
  • 第二個(gè)參數(shù):窗口的標(biāo)識(shí),可以設(shè)置以下幾個(gè)值

    WINDOW_NORMAL:用戶可以改變窗口大小
    WINDOW_AUTOSIZE:窗口大小會(huì)自動(dòng)調(diào)整使用圖片的大小,用戶不能手動(dòng)改變窗口的大小
    WINDOW_OPENGL:窗口創(chuàng)建的時(shí)候會(huì)支持OPENGL

1.4 輸入圖像到文件:imwrite()函數(shù)

bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() )

  • 第一個(gè)參數(shù): 填寫要寫入的文件名,帶上后綴,如123.jpg
  • 第二個(gè)參數(shù):一般填一個(gè)Mat類型的圖像數(shù)據(jù)
  • 第三個(gè)參數(shù):表示為特定格式保存的參數(shù)編碼

1.5綜合案例代碼

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;

int main() {
	//---------------------1.圖像的載入和顯示---------------------
	Mat girl = imread("../../image/girl.jpg"); //載入圖像到Mat
	namedWindow("【1】動(dòng)漫圖", WINDOW_NORMAL); //創(chuàng)建一個(gè)名為 [1]動(dòng)漫圖 的窗口
	imshow("【1】動(dòng)漫圖", girl); //顯示名為“【1】動(dòng)漫圖”的窗口

	//-----------------------2.初級(jí)圖像混合------------------------
	Mat dota= imread("../../image/dota.jpg");
	Mat logo = imread("../../image/logo.jpg");

	//載入后顯示
	namedWindow("【2】dota",WINDOW_NORMAL);
	imshow("【2】dota", dota);
	namedWindow("【3】logo", WINDOW_NORMAL);
	imshow("【3】logo", logo);
	
	//定義一個(gè)Mat類型,用于存放圖像的ROI
	Mat imageROI;
	//方法一
	imageROI = dota(Rect(800, 350, logo.cols, logo.rows));
	//方法二
	dota(Range(350, 350 + logo.rows), Range(800, 800 + logo.cols));
	
	//將image2加到image1上
	addWeighted(imageROI, 0.5, logo, 0.3, 0., imageROI);
	
	//顯示結(jié)果
	namedWindow("【4】dota+logo", WINDOW_NORMAL);
	imshow("【4】dota+logo", dota);

//-------------------------------3.圖像的輸出----------------------------
	//將一個(gè)Mat圖像輸出到圖像文件
	imwrite("由imrite生成的圖片.jpg", dota);
	waitKey(0);
	
	return 0;
}

快速上手Opencv:HighGUI圖形用戶界面

2. 滑動(dòng)條的創(chuàng)建和使用

2.1 創(chuàng)建滑動(dòng)條:createTrackbar()函數(shù)

int createTrackbar(const string& trackbarname , const string& winname , int* value , int count, TrackbarCallback onChange=0 , void* userdata=0);

  • 第一個(gè)參數(shù):軌跡條的名字
  • 第二個(gè)參數(shù):窗口的名字
  • 第三個(gè)參數(shù):一個(gè)指向整形的指針,表示滑塊的位置。在創(chuàng)建時(shí),滑塊的初始位置就是該變量當(dāng)前的值。
  • 第四個(gè)參數(shù):表示滑塊可以達(dá)到的最大值?;瑝K最小位置的值始終為0;

2.2 滑動(dòng)條案例

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

#define WINDOW_NAME "【線性混合示例】" //為窗口標(biāo)題定義的宏


//---------------------全局變量聲明部分---------------------
const int g_nMaxAlphaValue = 100; //Alpha的最大值
int g_nAlphaValueSlider; //滑動(dòng)條對(duì)應(yīng)的變量
double g_dAlphaValue;
double g_dBetaValue;

//聲明存儲(chǔ)圖像的變量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;


//--------------------on_Trackbar()函數(shù)---------------------
//相應(yīng)滑動(dòng)條的回調(diào)函數(shù)
void on_Trackbar(int, void*) {
	//求出當(dāng)前alpha值相當(dāng)于最大值的比例
	g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;
	//則beta值為1-alpha的值
	g_dBetaValue = (1.0 - g_dAlphaValue);

	//根據(jù)alpha和beta值進(jìn)行線性混合
	addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);

	//顯示效果圖
	imshow(WINDOW_NAME, g_dstImage);

}

int main() {
	//加載圖像
	g_srcImage1 = imread("../../image/1.tif");
	g_srcImage2 = imread("../../image/2.tif");
	if (!g_srcImage1.data) {
		cout << "讀取第一幅圖片失敗" << endl;
		return -1;
	}
	if (!g_srcImage2.data) {
		cout << "讀取第二幅圖片失敗" << endl;
		return -1;
	}

	//設(shè)置滑動(dòng)條初值為70
	g_nAlphaValueSlider = 70;

	//創(chuàng)建窗體
	namedWindow(WINDOW_NAME, 1);

	//在創(chuàng)建的窗體中創(chuàng)建一個(gè)滑動(dòng)條控件
	char TrackbarName[50];
	sprintf_s(TrackbarName, "透明值%d", g_nMaxAlphaValue);
	createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider,
		g_nMaxAlphaValue, on_Trackbar);

	//結(jié)果在回調(diào)函數(shù)中顯示
	on_Trackbar(g_nAlphaValueSlider, 0);
	
	waitKey(0);
	return 0;
}

快速上手Opencv:HighGUI圖形用戶界面

2.3 獲取當(dāng)前軌跡條的位置:getTrackbarPos()函數(shù)

該函數(shù)是配合createTrackbar使用的函數(shù),它用于獲取當(dāng)前軌跡條的位置。
int getTrackbarpos(const string& trackbarname,const string& winname);

  • 第一個(gè)參數(shù):表示軌跡條的名字
  • 第二個(gè)參數(shù):表示軌跡條的父窗口的名稱

3.鼠標(biāo)操作

OpenCV中的鼠標(biāo)操作和滑動(dòng)條的消息映射方式很類似,都是通過一個(gè)中介函數(shù)配合一個(gè)回調(diào)函數(shù)來實(shí)現(xiàn)的。
void setMousecCallback(const string &winname,MouseCallback onMouse,void* userdata=0)

  • 第一個(gè)參數(shù):窗口的名稱
  • 第二個(gè)參數(shù):指定窗口里每次鼠標(biāo)時(shí)間發(fā)生的時(shí)候,被調(diào)用的函數(shù)指針。

3.1 鼠標(biāo)操作案例

#include<opencv2/opencv.hpp>
using namespace cv;

#define WINDOW_NAME "【程序窗口】"

//----------------------------全局函數(shù)聲明-----------------------
void on_MouseHandle(int event, int x, int y, int flags, void* param);
void DrawRectangle(Mat& img, Rect box);
void ShowHelpText();

//-------------------------全局變量聲明部分-----------------------
Rect g_rectangle;
bool g_bDrawingBox = false;//是否進(jìn)行繪制
RNG g_rng(12345);

int main() {
	g_rectangle = Rect(-1, -1, 0, 0);
	Mat srcImage(600, 800, CV_8UC3), tempImage;
	srcImage.copyTo(tempImage);
	g_rectangle = Rect(-1, -1, 0, 0);
	srcImage = Scalar::all(0);

	//設(shè)置鼠標(biāo)操作回調(diào)函數(shù)
	namedWindow(WINDOW_NAME);
	setMouseCallback(WINDOW_NAME, on_MouseHandle, (void*)& srcImage);

	//循環(huán),當(dāng)進(jìn)行繪制的標(biāo)識(shí)符為真時(shí),進(jìn)行繪制
	while (1) {
		srcImage.copyTo(tempImage); //復(fù)制原圖到臨時(shí)變量
		if (g_bDrawingBox)
			DrawRectangle(tempImage, g_rectangle);
		imshow(WINDOW_NAME, tempImage);
		if (waitKey(10) == 27) 
			break; //按下ESC程序退出
	}
	return 0;
}

void on_MouseHandle(int event, int x, int y, int flag, void* param) {
	Mat& image = *(Mat*)param;
	switch (event) {
		//鼠標(biāo)移動(dòng)消息
		case EVENT_MOUSEMOVE:
		{
			if (g_bDrawingBox)//如果是否進(jìn)行繪制的標(biāo)識(shí)為真,則記錄下長和寬到RECT型變量中
			{
				g_rectangle.width = x - g_rectangle.x;
				g_rectangle.height = y - g_rectangle.y;
			}
		}
			break;
		//左鍵摁下
		case EVENT_LBUTTONDOWN:
		{
			g_bDrawingBox = true;
			g_rectangle = Rect(x, y, 0, 0);//記錄起始點(diǎn)
		}
			break;

		//左鍵松開
		case EVENT_LBUTTONUP:
		{
			g_bDrawingBox = false;//置標(biāo)識(shí)符為false
			//對(duì)寬和高小于的0處理
			if (g_rectangle.width < 0) {
				g_rectangle.x += g_rectangle.width;
				g_rectangle.width *= -1;
			}

			if (g_rectangle.height < 0) {
				g_rectangle.x += g_rectangle.height;
				g_rectangle.height *= -1;
			}

			//調(diào)用繪制函數(shù)
			DrawRectangle(image, g_rectangle);
		}
			break;
	}
}


//------------------------DrawRectangle()函數(shù)------------------------
void DrawRectangle(Mat& img, Rect box) {
	rectangle(img, box.tl(), box.br(), Scalar(g_rng.uniform(0, 255),
		g_rng.uniform(0, 255), g_rng.uniform(0, 255)));//設(shè)置隨機(jī)顏色
}

快速上手Opencv:HighGUI圖形用戶界面文章來源地址http://www.zghlxwxcb.cn/news/detail-481321.html

到了這里,關(guān)于快速上手Opencv:HighGUI圖形用戶界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • Python圖形用戶界面

    Python圖形用戶界面

    目錄 1.圖形用戶界面概述 1.1tkinter 2.tkinter概述 2.1tkinter模塊 2.2圖形用戶界面的構(gòu)成 ?2.3框架和GUI應(yīng)用程序類 2.4tkinter主窗口 3幾何布局管理器 3.1pack幾何布局管理器 3.2grid幾何布局管理器 3.3place幾何布局管理器 4.事件處理 4.1事件類型 4.2事件綁定 4.3事件處理函數(shù) 5.常用組件 ??

    2024年02月09日
    瀏覽(24)
  • 設(shè)計(jì)圖形用戶界面的原則

    1) 一般性原則:界面要具有一致性、常用操作要有快捷方式、 提供簡(jiǎn)單的錯(cuò)誤處理、對(duì)操作人員的重要操作要有信息反饋、操作可 逆、設(shè)計(jì)良好的聯(lián)機(jī)幫助、合理劃分并高效地使用顯示屏、保證信息 顯示方式與數(shù)據(jù)輸入方式的協(xié)調(diào)一致 2) 顏色的使用:顏色是一種有效的強(qiáng)化

    2024年02月08日
    瀏覽(31)
  • Java——GUI(圖形用戶界面)

    Java——GUI(圖形用戶界面)

    1、掌握布局管理器、AWT事件處理機(jī)制以及常用事件 2、熟悉Swing組件的使用 3、了解GUI開發(fā)的相關(guān)原理和技巧 GUI全稱是GraphicalUser Interface,即圖形用戶界面。顧名思義,就是應(yīng)用程序提供給用戶操作的圖形界面,包括窗口、菜單、按鈕、工具欄和其他各種圖形界面元素。目前,

    2024年02月09日
    瀏覽(23)
  • Java | GUI 圖形用戶界面

    Java | GUI 圖形用戶界面

    ????????GUI 全稱 Graphical User Interface 圖形用戶界面 ,指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。?軟件以圖形界面形式運(yùn)行時(shí),用戶可借助于菜單、按鈕、標(biāo)簽等組件和通過鼠標(biāo)、鍵盤等的操作共同完成對(duì)軟件的應(yīng)用。 ????????當(dāng)程序運(yùn)行后,出現(xiàn)的圖形窗口,稱為

    2024年02月08日
    瀏覽(22)
  • Qt用戶圖形界面設(shè)計(jì)應(yīng)用(鬧鐘)

    Qt用戶圖形界面設(shè)計(jì)應(yīng)用(鬧鐘)

    什么是Qt Qt 是一個(gè)跨平臺(tái)的 C++ 圖形用戶界面庫,由挪威 TrollTech 公司于 1995 年底出品,并于 2008年6月17日被NOKIA公司收購,以增強(qiáng)NOKIA公司在跨平 臺(tái)軟件研發(fā)方面的實(shí)力,更名為Qt Software。 Qt的優(yōu)點(diǎn) 基本上, Qt 同 X Window 上的 Motif, Openwin, GTK 等圖形界 面庫 和 Windows 平臺(tái)上的

    2024年02月08日
    瀏覽(29)
  • Python 圖形用戶界面(GUI)框架有哪些

    Tkinter 是 Python 的標(biāo)準(zhǔn) GUI 庫。Python 使用 Tkinter 可以快速的創(chuàng)建 GUI 應(yīng)用程序。輕量級(jí)的跨平臺(tái)圖形用戶界面(GUI)開發(fā)工具。 由于 Tkinter 是內(nèi)置到 python 的安裝包中 、只要安裝好 Python 之后就能 import Tkinter 庫、而且 IDLE 也是用 Tkinter 編寫而成、對(duì)于簡(jiǎn)單的圖形界面 Tkinter 還是

    2024年02月08日
    瀏覽(50)
  • MATLAB 之 可視化圖形用戶界面設(shè)計(jì)

    MATLAB 之 可視化圖形用戶界面設(shè)計(jì)

    MATLAB 提供了圖形用戶界面開發(fā)環(huán)境(Graphical User Interface Development Environment,GUIDE),在這種開發(fā)環(huán)境下,用戶界面設(shè)計(jì)變得方便、直觀,實(shí)現(xiàn)了 “所見即所得” 的可視化設(shè)計(jì)。 1.1 圖形用戶界面設(shè)計(jì)模板 在 MATLAB 命令行窗口輸入 guide 命令,或在 MATLAB 主窗口中選擇 “主頁”

    2024年02月11日
    瀏覽(24)
  • 如何使用Java實(shí)現(xiàn)圖形用戶界面(GUI)?

    隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,圖形用戶界面(GUI)成為現(xiàn)代軟件開發(fā)的一個(gè)重要方面。通過使用GUI,開發(fā)人員可以創(chuàng)建具有可視化界面的應(yīng)用程序,以提供更好的用戶體驗(yàn)。在本文中,我們將介紹如何使用Java實(shí)現(xiàn)GUI。 Java提供了多個(gè)GUI庫,包括Swing、JavaFX和AWT。其中,Swing和

    2024年02月04日
    瀏覽(28)
  • PyQT5: 構(gòu)建圖形用戶界面的Python指南

    PyQt5是一個(gè)Python綁定的跨平臺(tái)C++庫,用于創(chuàng)建豐富的圖形用戶界面(GUI)。它是Qt庫的Python接口,Qt庫由Qt公司開發(fā),用于開發(fā)GUI程序,也稱作應(yīng)用程序框架。在此,我們將詳細(xì)介紹如何使用PyQt5創(chuàng)建圖形用戶界面。 在開始之前,我們需要確保已經(jīng)在Python環(huán)境中安裝了PyQt5。如果

    2024年02月13日
    瀏覽(29)
  • 探索PySimpleGUI:一款簡(jiǎn)潔易用的圖形用戶界面庫

    探索PySimpleGUI:一款簡(jiǎn)潔易用的圖形用戶界面庫

    目錄 PySimpleGUI 安裝使用 代碼框架 常用控件 Text Input Button 布局方法 事件循環(huán) 示例代碼 調(diào)試窗口 主題 theme Listbox控件 簡(jiǎn)單實(shí)例 小結(jié) PySimpleGUI是一個(gè)基于Tkinter、WxPython、Qt等底層庫構(gòu)建的圖形界面框架,其設(shè)計(jì)目標(biāo)是使Python GUI編程變得更加簡(jiǎn)單直觀,大大降低了入門門檻。無

    2024年01月18日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包