#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
cv::Mat img = imread("./sun.png"); //3通道 24位
if (img.empty()) {
std::cout << "could not load image!\n" << endl;
return -1;
}
namedWindow("input",WINDOW_FREERATIO);
imshow("input",img);
std::cout << "load image!\n" << endl;
//0 阻塞 1停頓一毫秒
waitKey(0);
destroyAllWindows();
return 0;
}
運(yùn)行
一、imread
imread是OpenCV圖像處理庫(kù)中的一個(gè)函數(shù),用于從文件中讀取圖像數(shù)據(jù)并將其存儲(chǔ)為一個(gè)Mat對(duì)象
cv::Mat cv::imread(
const String& filename, // 文件路徑
int flags = IMREAD_COLOR // 圖像讀取標(biāo)志,默認(rèn)為彩色圖像
);
其中,參數(shù)filename指定了要讀取的圖像文件的路徑和文件名;參數(shù)flags指定了讀取圖像時(shí)的標(biāo)志,它是一個(gè)可選參數(shù),默認(rèn)值為IMREAD_COLOR,表示讀取彩色圖像。
imread函數(shù)支持讀取多種圖像格式的文件,包括PNG、JPEG、BMP、GIF、TIFF等。讀取的圖像數(shù)據(jù)存儲(chǔ)在一個(gè)Mat對(duì)象中,可以通過(guò)Mat對(duì)象的成員函數(shù)來(lái)訪(fǎng)問(wèn)和操作圖像數(shù)據(jù)。
需要注意的是,如果指定的文件不存在或格式不正確,imread函數(shù)會(huì)返回一個(gè)空的Mat對(duì)象。因此,在調(diào)用imread函數(shù)之后,需要檢查返回值是否為空,以確保圖像已經(jīng)正確讀取。
imread函數(shù)的flags參數(shù)用于指定圖像的讀取方式,它是一個(gè)可選參數(shù),如果不指定則默認(rèn)為IMREAD_COLOR,即讀取彩色圖像。flags參數(shù)可以取以下幾個(gè)值之一:
-
IMREAD_UNCHANGED:讀取原始圖像,包括圖像的alpha通道(如果存在的話(huà)),并將其存儲(chǔ)在Mat對(duì)象中。
-
IMREAD_GRAYSCALE:以灰度模式讀取圖像,將圖像轉(zhuǎn)換為單通道灰度圖像,并將其存儲(chǔ)在Mat對(duì)象中。
-
IMREAD_COLOR:讀取彩色圖像,將圖像轉(zhuǎn)換為三通道BGR格式,并將其存儲(chǔ)在Mat對(duì)象中。
-
IMREAD_ANYDEPTH:讀取圖像的像素深度為16位或32位的圖像,將其存儲(chǔ)在Mat對(duì)象中。
-
IMREAD_ANYCOLOR:讀取圖像的顏色格式為任意格式的圖像,將其存儲(chǔ)在Mat對(duì)象中。
-
IMREAD_REDUCED_GRAYSCALE_2:以降采樣的灰度模式讀取圖像,將圖像轉(zhuǎn)換為單通道灰度圖像,并將其存儲(chǔ)在Mat對(duì)象中,圖像大小減半。
-
IMREAD_REDUCED_GRAYSCALE_4:以降采樣的灰度模式讀取圖像,將圖像轉(zhuǎn)換為單通道灰度圖像,并將其存儲(chǔ)在Mat對(duì)象中,圖像大小縮小為原來(lái)的四分之一。
-
IMREAD_REDUCED_GRAYSCALE_8:以降采樣的灰度模式讀取圖像,將圖像轉(zhuǎn)換為單通道灰度圖像,并將其存儲(chǔ)在Mat對(duì)象中,圖像大小縮小為原來(lái)的八分之一。
需要注意的是,IMREAD_ANYDEPTH和IMREAD_ANYCOLOR兩個(gè)標(biāo)志不能單獨(dú)使用,必須與其他標(biāo)志一起使用。同時(shí),降采樣的灰度模式只適用于灰度圖像,對(duì)于彩色圖像則無(wú)效。
二、namedWindow
namedWindow是OpenCV圖像處理庫(kù)中的一個(gè)函數(shù),用于創(chuàng)建一個(gè)窗口對(duì)象,以便后續(xù)在該窗口中顯示圖像或執(zhí)行其他操作。
void namedWindow(
const String& winname, // 窗口名稱(chēng)
int flags = WINDOW_AUTOSIZE // 窗口屬性,默認(rèn)為自適應(yīng)大小
);
其中,參數(shù)winname指定了創(chuàng)建的窗口的名稱(chēng),可以是任意字符串;參數(shù)flags指定了創(chuàng)建的窗口的屬性,它是一個(gè)可選參數(shù),默認(rèn)值為WINDOW_AUTOSIZE,表示創(chuàng)建一個(gè)自適應(yīng)大小的窗口,即窗口的大小會(huì)自動(dòng)調(diào)整以適應(yīng)要顯示的圖像的大小。如果將flags設(shè)置為WINDOW_FREERATIO,則創(chuàng)建的窗口可以手動(dòng)調(diào)整大小,即可以通過(guò)鼠標(biāo)拖動(dòng)窗口邊框來(lái)改變窗口大小,并且圖像的寬高比會(huì)保持不變。
namedWindow函數(shù)的flags參數(shù)用于指定創(chuàng)建的窗口的屬性,它是一個(gè)可選參數(shù),如果不指定則默認(rèn)為WINDOW_AUTOSIZE,即創(chuàng)建一個(gè)自適應(yīng)大小的窗口。flags參數(shù)可以取以下幾個(gè)值之一:
- WINDOW_NORMAL:創(chuàng)建一個(gè)手動(dòng)調(diào)整大小的窗口,可以通過(guò)鼠標(biāo)拖動(dòng)窗口邊框來(lái)改變窗口大小,并且圖像的寬高比會(huì)保持不變。
- WINDOW_AUTOSIZE:創(chuàng)建一個(gè)自適應(yīng)大小的窗口,即窗口的大小會(huì)自動(dòng)調(diào)整以適應(yīng)要顯示的圖像的大小。
- WINDOW_FREERATIO:創(chuàng)建一個(gè)手動(dòng)調(diào)整大小的窗口,可以通過(guò)鼠標(biāo)拖動(dòng)窗口邊框來(lái)改變窗口大小,并且圖像的寬高比也可以隨意改變。
需要注意的是,WINDOW_NORMAL和WINDOW_FREERATIO兩個(gè)標(biāo)志不能同時(shí)使用,只能選擇其中一個(gè)。
三、imshow
imshow是OpenCV圖像處理庫(kù)中的一個(gè)函數(shù),用于在指定的窗口中顯示圖像。
void imshow(
const String& winname, // 窗口名稱(chēng)
InputArray mat // 要顯示的圖像
);
其中,參數(shù)winname指定了要在哪個(gè)窗口中顯示圖像,它必須與之前使用namedWindow函數(shù)創(chuàng)建的窗口名稱(chēng)相同;參數(shù)mat是要顯示的圖像,它可以是Mat、UMat、MatExpr等類(lèi)型的對(duì)象。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-625415.html
推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)人覺(jué)得老師講得不錯(cuò),分享給大家:
零聲白金學(xué)習(xí)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang云原生/音視頻/Linux內(nèi)核)
https://xxetb.xet.tech/s/VsFMs文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-625415.html
到了這里,關(guān)于openCV圖像讀取和顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!