欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?OpenCV中幾種基本的圖像處理方式

 更新時(shí)間:2022年01月25日 09:12:45   作者:routine__007  
大家好,本篇文章主要講的是C++?OpenCV中幾種基本的圖像處理方式,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

雖然單單要做車牌號(hào)識(shí)別的話不需要特別多種類的圖像處理,但是我們不能只是為了這么一個(gè)目標(biāo)去學(xué)習(xí),所以這次就講一些OpenCV里基本的圖像處理,大家以后可以根據(jù)需求使用不同的圖像處理。

一、圖像顯示

【打開(kāi)Visual Studio】→【新建項(xiàng)目】→【W(wǎng)in32控制臺(tái)應(yīng)用項(xiàng)目(修改名稱后點(diǎn)確定)】→【下一步】→【空項(xiàng)目(勾起來(lái)以后點(diǎn)擊確認(rèn))】→【解決方案資源管理器】→【源文件】→【新建項(xiàng)】→【添加】→【(修改名稱后點(diǎn)擊確定)】

(后面的程序都是以這個(gè)操作開(kāi)頭的,而我為了方便所以就在一個(gè)源文件里進(jìn)行修改了)

我這次的路徑是D:\University\New\Test2\Test2

#include<opencv2\opencv.hpp>
using namespace cv; //包含cv命名空間
 
void main(){
	Mat img = imread("1.jpg"); //載入圖片
	imshow("【原始圖】", img); //顯示圖像
	waitKey(0); //等待任意按鍵按下
}

此處的1.jpg是放在了上面那個(gè)路徑里面,出現(xiàn)的效果圖:

當(dāng)然,其實(shí)也可以顯示不在該文件夾里的圖片,只需要將“1.jpg”改成你想要顯示的圖片所在的路徑即可,例如我在D盤存了個(gè)2.jpg,我想要顯示它,就只需將代碼改成Mat img=imread("D://2.jpg");就可以了。

為了和上次的有些區(qū)別,我們來(lái)稍微講一下代碼中的一些語(yǔ)句的含義。

1、OpenCV的命名空間

      OpenCV中的C++類和函數(shù)都是定義在命名空間cv之內(nèi)的,有兩種方法可以訪問(wèn):第一種,是在代碼開(kāi)頭的適當(dāng)位置加上using namespace cv;這句代碼,規(guī)定程序位于此命名空間之內(nèi);另外一種,是在使用OpenCV的每一個(gè)類和函數(shù)時(shí),都加入cv::命名空間。不用講都知道,第二種方法十分的繁瑣,所以,推薦大家在代碼開(kāi)頭的適當(dāng)位置,加上using namespace cv;這句。

2、Mat類簡(jiǎn)析

       Mat類是用于保存圖像以及其他矩陣數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),默認(rèn)情況下其尺寸為0。我們也可以指定其初始尺寸,比如定義一個(gè)Mat類對(duì)象,就要寫(xiě)cv::Mat pic(320,640,cv::Scalar(100));,Mat類是OpenCV里十分重要,內(nèi)容有很多,我們這里需要用到的關(guān)于Mat的其實(shí)就是簡(jiǎn)單的這樣一句代碼:Mat img=imread("1.jpg");,所以我就不在多講了。

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

       imread()函數(shù)是用于讀取文件中的圖片到OpenCV中??梢栽贠penCV官方文檔中查到它的原形,如下:

       Mat imread(const string& filename, intflags=1);

       第一個(gè)參數(shù),const string&類型的filename,填我們需要載入的圖片路徑名,在Windows操作系統(tǒng)下,OpenCV的imread函數(shù)支持如下類型的圖像載入。

       第二個(gè)參數(shù),int類型的flags,為載入標(biāo)識(shí),他指定一個(gè)加載圖像的顏色類型【這個(gè)內(nèi)容有些生澀難理解,故不多贅述】。

4、imshow()函數(shù)

      imshow()函數(shù)用于在指定的窗口中顯示一幅圖像,函數(shù)原型如下。

      void imshow(const string& winname, InputArray mat);

      第一個(gè)參數(shù),const string&類型的winname,填需要顯示的窗口標(biāo)識(shí)名稱。

      第二個(gè)參數(shù),InputArray類型的mat,填需要顯示的圖像?!竞芏鄷r(shí)候,遇到函數(shù)原型中的InputArray/OutputArray類型,我們把它簡(jiǎn)單地當(dāng)做Mat類型即可。因?yàn)樗亩x有些難理解,而且源代碼略顯冗長(zhǎng),所以不過(guò)多贅述】

二、圖像腐蝕和膨脹

      腐蝕,即用圖像中的暗色部分“腐蝕”掉圖像中的高亮部分。代碼如下:

#include<opencv2\highgui\highgui.hpp> //OpenCV highgui模塊頭文件
#include<opencv2\imgproc\imgproc.hpp> //OpenCV 圖像處理頭文件
using namespace cv; //包含cv命名空間
 
int main(){
	//載入圖片
	Mat img = imread("1.jpg");
	//顯示原圖
	imshow("【原圖】腐蝕操作", img);
	//進(jìn)行腐蝕操作
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstimg;
	erode(img, dstimg, element);
	//顯示效果圖
	imshow("【效果圖】腐蝕操作", dstimg);
	waitKey(0);
	return 0;
}

程序首先依然是載入和顯示一幅圖像,然后定義一個(gè)Mat類型的變量來(lái)獲得getStructuringElement函數(shù)的返回值,而getStructuringElement函數(shù)的返回值為指定形狀和尺寸的結(jié)構(gòu)元素(內(nèi)核矩陣)。參數(shù)準(zhǔn)備完畢,接著便可以調(diào)用erode函數(shù)進(jìn)行圖像腐蝕操作,然后調(diào)用imshow函數(shù)進(jìn)行顯示。

下面對(duì)getStructuringElement函數(shù)進(jìn)行簡(jiǎn)單的講述:

第一個(gè)參數(shù),內(nèi)核的形狀(一般有下面三種:矩形:MORPH_RECT;交叉形:MORPH_CROSS;橢圓形:MORPH_ELLIPSE)

第二個(gè)參數(shù),內(nèi)核的大?。ㄉ厦娴拇a,表示的就是15*15的正方形內(nèi)核)

效果圖如下(原圖都和一中的原圖一樣,故不再顯示):

膨脹,和腐蝕相反,從圖像直觀來(lái)看,就是將圖像光亮部分放大,黑暗部分縮小。代碼如下:

#include<opencv2\highgui\highgui.hpp> //OpenCV highgui模塊頭文件
#include<opencv2\imgproc\imgproc.hpp> //OpenCV 圖像處理頭文件
using namespace cv; //包含cv命名空間
 
int main(){
	//載入圖片
	Mat img = imread("1.jpg");
	//顯示原圖
	imshow("【原圖】膨脹操作", img);
	//進(jìn)行膨脹操作
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstimg;
	dilate(img, dstimg, element);
	//顯示效果圖
	imshow("【效果圖】膨脹操作", dstimg);
	waitKey(0);
	return 0;
}

和腐蝕的代碼的區(qū)別就只在于調(diào)用的函數(shù)不同,膨脹調(diào)用的是dilate函數(shù)。

效果圖如下:

三、圖像模糊

模糊,對(duì)圖像進(jìn)行均值濾波處理,然后就把圖像模糊了……代碼如下:

#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace cv;
 
int main(){
	//載入原圖
	Mat img = imread("1.jpg");
	//顯示原圖
	imshow("【原圖】均值濾波", img);
	//進(jìn)行均值濾波操作
	Mat dstimg;
	blur(img, dstimg, Size(7, 7));
	//顯示效果圖
	imshow("【效果圖】均值濾波", dstimg);
	waitKey(0);
	return 0;
}

blur函數(shù)的第三個(gè)參數(shù)表示的是內(nèi)核的大小,代碼中的意思是像素長(zhǎng)寬均為7的一個(gè)內(nèi)核。

效果圖如下:

四、canny邊緣檢測(cè)

這個(gè)操作會(huì)在我們最終要實(shí)現(xiàn)的汽車車牌識(shí)別中會(huì)出現(xiàn)。

載入圖像,并將其轉(zhuǎn)成灰度圖,再用blur函數(shù)進(jìn)行圖像模糊以降噪,然后用canny函數(shù)進(jìn)行邊緣檢測(cè),最后進(jìn)行顯示。代碼如下:

#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace cv;
 
int main(){
	//載入原圖
	Mat srcImage = imread("1.jpg");
	//顯示原圖
	imshow("【原圖】Canny邊緣檢測(cè)", srcImage);
	Mat dstImage, edge, grayImage;
	//【1】創(chuàng)建于src同類型和大小的矩陣dst
	dstImage.create(srcImage.size(), srcImage.type());
	//【2】將原圖像轉(zhuǎn)換成灰度圖像
	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
	//【3】先使用3*3內(nèi)核來(lái)降噪
	blur(grayImage, edge, Size(3, 3));
	//【4】運(yùn)行Canny算子
	Canny(edge, edge, 3, 9, 3);
	//顯示效果圖
	imshow("【效果圖】Canny邊緣檢測(cè)", edge);
	waitKey(0);
	return 0;
}

簡(jiǎn)單講一下Canny函數(shù)各參數(shù)的意義:

      第一個(gè)參數(shù):輸入,是灰度圖,就算是彩色圖也會(huì)處理成灰度圖(但是如果不先轉(zhuǎn)成灰度圖像并降噪的話會(huì)出現(xiàn)很多原本不存在的線條,大家可以自己嘗試一下)

      第二個(gè)參數(shù):輸出的圖的位置,輸出的圖是二值圖。

      第三四個(gè)參數(shù):是兩個(gè)閾值,上限和下限,如果一個(gè)像素的梯度大于上限,則被認(rèn)為是邊緣像素,如果低于下限則被拋棄,如果介于兩者之間,只有當(dāng)其與高于上限閾值的像素連接時(shí)才會(huì)被接受。

      第五個(gè)參數(shù):表示模板的大小,如果是3,則表示3*3矩陣的大小。

效果圖如下:

到此這篇關(guān)于C++ OpenCV中幾種基本的圖像處理方式的文章就介紹到這了,更多相關(guān)C++ OpenCV圖像處理方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Opencv圖像處理之輪廓外背景顏色改變

    Opencv圖像處理之輪廓外背景顏色改變

    這篇文章主要為大家詳細(xì)介紹了Opencv圖像處理之輪廓外背景顏色改變,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • QT出現(xiàn)沒(méi)有MySQL驅(qū)動(dòng)手動(dòng)編譯詳細(xì)步驟

    QT出現(xiàn)沒(méi)有MySQL驅(qū)動(dòng)手動(dòng)編譯詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于QT出現(xiàn)沒(méi)有MySQL驅(qū)動(dòng)手動(dòng)編譯詳細(xì)步驟的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用QT具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 關(guān)于vs strcpy_s()和strcat_s()用法探究

    關(guān)于vs strcpy_s()和strcat_s()用法探究

    這篇文章主要介紹了關(guān)于vs strcpy_s()strcat_s()用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 淺析VC++中的頭文件包含問(wèn)題

    淺析VC++中的頭文件包含問(wèn)題

    類中盡量采用指針或引用方式調(diào)用其它類,這樣就可以只聲明class xxx了。并且這也符合資源最優(yōu)利用,更利于使用多態(tài)
    2013-09-09
  • c++中ref的作用示例解析

    c++中ref的作用示例解析

    這篇文章主要為大家介紹了c++中ref的作用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • C語(yǔ)言實(shí)現(xiàn)影院售票管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)影院售票管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)影院售票管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語(yǔ)言 數(shù)與串之間轉(zhuǎn)換的方法

    C語(yǔ)言 數(shù)與串之間轉(zhuǎn)換的方法

    C語(yǔ)言 數(shù)與串之間轉(zhuǎn)換的方法,需要的朋友可以參考一下
    2013-05-05
  • 淺析C語(yǔ)言編程中的數(shù)組越界問(wèn)題

    淺析C語(yǔ)言編程中的數(shù)組越界問(wèn)題

    這篇文章主要介紹了淺析C語(yǔ)言編程中的數(shù)組越界問(wèn)題,通過(guò)內(nèi)存空間來(lái)討論其導(dǎo)致的程序崩潰問(wèn)題,需要的朋友可以參考下
    2015-11-11
  • C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping

    C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping

    本文主要介紹了C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語(yǔ)言版猜數(shù)字小游戲

    C語(yǔ)言版猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言版猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論