日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Opencv的使用小教程1——Opencv基础函数汇总

發布時間:2024/1/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Opencv的使用小教程1——Opencv基础函数汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Opencv的使用小教程1——Opencv基礎函數匯總

  • 1、VideoCapture
  • 2、imread
  • 3、resize
  • 4、clone
  • 5、cvtColor
  • 6、Scalar
  • 7、獲取像素點的值
  • 8、Rect
  • 9、截取Rect部分圖像
  • 10、equalizeHist直方圖均衡化
  • 11、threshold閾值操作
  • 12、line直線繪畫
  • 13、ellipse橢圓繪畫:
  • 14、circle圓繪畫:
  • 15、rectangle矩形繪畫:
  • 16、fillPoly多邊形繪畫:

基本上沒有接觸過圖像處理的我,在項目的壓迫下,要在一星期內精通一切,但是還是要微笑啊。

該部分主要提到的函數包括,攝像頭讀取、圖片讀取、圖片復制、圖片伸縮、直方圖、二值化、基礎繪畫等。其它圖像處理函數如濾波,角點檢測的函數,將在其它文章匯總。
Opencv常用圖像處理函數匯總

1、VideoCapture

VideoCapture可用于從攝像頭獲取圖像,在使用前可以通過如下函數進行初始化。

VideoCapture cap; cap.open(0); //打開相機,電腦自帶攝像頭一般編號為0 //外接攝像頭編號為1,在設備管理器中可以查詢 cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280); //設置捕獲視頻的寬度 cap.set(CV_CAP_PROP_FRAME_HEIGHT, 400); //設置捕獲視頻的高度 if (!cap.isOpened()) //判斷是否成功打開相機 {cout << "攝像頭打開失敗!" << endl;return -1; }

用如下函數可以捕獲圖像。

//從相機捕獲一幀圖像 cap >> frame;

2、imread

imread共有兩個參數,分別是const String& filename和int flags。其中:
filename代表想要讀取的圖片的路徑與名字。
flags代表標志位,該標志位代表轉換成Mat的數據存儲形式。默認值IMREAD_COLOR。
其可以取得如下值:

IMREAD_UNCHANGED //如果設置,則返回的數據帶有alpha通道(R,G,B,A 四個通道),否則沒有alpha通道 IMREAD_GRAYSCALE //如果設置,則將圖像轉換為單通道灰度圖像 IMREAD_COLOR //如果設置,則將圖像轉換成3通道BGR彩色圖像 IMREAD_ANYDEPTH //如果設置,則在輸入具有相應深度時返回16位/32位圖像,否則將其轉換為8位 IMREAD_ANYCOLOR //如果設置,則圖像可能以任何顏色格式讀取 IMREAD_LOAD_GDAL //如果設置,使用gdal驅動程序加載圖像 IMREAD_REDUCED_GRAYSCALE_2//如果設置,總是將圖像轉換為單通道灰度圖像且圖像大小減少1/2 IMREAD_REDUCED_COLOR_2 //如果設置,總是將圖像轉換為3通道BGR彩色圖像且圖像大小減少1/2 IMREAD_REDUCED_GRAYSCALE_4//如果設置,總是將圖像轉換為單通道灰度圖像且圖像大小減少1/4 IMREAD_REDUCED_COLOR_4 //如果設置,總是將圖像轉換為3通道BGR彩色圖像且圖像大小減少1/4 IMREAD_REDUCED_GRAYSCALE_8//如果設置,總是將圖像轉換為單通道灰度圖像且圖像大小減少1/8 IMREAD_REDUCED_COLOR_8 //如果設置,總是將圖像轉換為3通道BGR彩色圖像且圖像大小減少1/4 IMREAD_IGNORE_ORIENTATION //如果設置,不會根據EXIF的方向標志旋轉圖像

實際上這些標志位存儲在一個名為ImreadModes的枚舉量里。
在實際使用時可以通過如下函數進行圖片讀取:

imread("image.jpg",IMREAD_GRAYSCALE);

3、resize

resize用于改變圖片的分辨率
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
其中,前兩個參數分別為輸入和輸出圖像。dsize表示輸出圖像的大小,如果為0,則利用fx和fy進行比例放大。
當dsize=0時,表示利用fx和fy進行比例放大,fx=fy=2時,表示放大為原來的兩倍;
當fx=fy=0時,表示利用dsize放大,假設dsize = (640,400),那么將圖像分辨率調整為(640,400)。
interpolation表示插值方式,共有以下幾種插值方法:

INTER_NEAREST //最近鄰插值 INTER_LINEAR //線性插值(默認) INTER_AREA //區域插值 INTER_CUBIC //三次樣條插值 INTER_LANCZOS4 //Lanczos插值

在實際應用中可以通過如下方式進行應用:

//從相機捕獲一幀圖像 cap >> frame; //用于存放灰度數據 Mat grayImage; // 利用dsize進行縮放 double fScale = 1; Size dsize = Size(frame.cols*fScale, frame.rows*fScale);// 建立一個大小與imagedst相同的圖像 Mat imagedst = Mat(dsize, CV_32S);// imagedst表示目標圖像 resize(frame, imagedst, dsize);

4、clone

clone用于圖像克隆,也就是圖像復制。在實際應用中可以復制圖像,在進行修改時可以不修改原圖。
通過如下方式可以實現圖像克隆。

Mat dst; dst = src.clone();

5、cvtColor

cvtColor用于圖像的類型轉換。如BGR圖轉換為灰度圖,RGB圖轉化為BGR圖等。
通過如下方式可以實現圖像的類型轉換。

cvtColor(src, srcGray, COLOR_BGR2GRAY);

常用的轉化碼如下:

CV_BGR2RGB //在RGB或BGR色彩空間之間轉換 CV_RGB2BGRCV_RGB2GRAY //RGB或者BGR色彩空間與灰度空間轉換 CV_BGR2GRAY CV_GRAY2RGB CV_GRAY2BGRCV_RGB2RGBA //加入alpha通道或者刪除alpha通道 CV_BGR2BGRA CV_RGBA2RGB CV_BGRA2BGR

6、Scalar

Scalar(int,int,int);表示每個通道的數值,常常在建立空圖片的時候使用。
使用方式如下所示,其可以建立三個圖像:

Mat blue_m(256,256,CV_8UC3,Scalar(255,0,0)); Mat green_m(256,256,CV_8UC3,Scalar(0,255,0)); Mat red_m(256,256,CV_8UC3,Scalar(0,0,255)); imshow("Blue",blue_m); imshow("Green",green_m); imshow("Red",red_m);

7、獲取像素點的值

可以通過如下函數獲得像素點的值:

int pixel = image.at<Vec3b>(0, 0)[0];

如上代表獲取第i行,第j列,0為第一通道,1為第二通道,2為第三通道,若要獲取透明通道則要Vec4b。

8、Rect

Rect用于獲得矩形,其一共有四個輸入值,分別是左上角坐標x,y,寬,高。
可以通過如下函數建立一個矩形:

Rect rec = Rect(0, 0, 640, 400);

此時建立了一個分辨率為(640,400)的矩形。注意的是,函數中640是矩形的寬度,不是右下角的坐標。

9、截取Rect部分圖像

Rect用于獲得矩形,通過特定的函數可以獲得該部分的圖像。
假設原圖變量為image
可以通過如下函數獲得部分圖像:

Rect rec = Rect(200, 200, 200, 200); Mat part_img= image(rec); //獲取縮放后右Camera的圖像

通過該方式獲得了一個左上角位于image(200,200)位置,分辨率為(200,200)的圖像。

10、equalizeHist直方圖均衡化

均衡化的圖像相比于原圖有明顯的增強,可用于增強原圖的可觀測性。
可以通過如下函數進行直方圖均衡化:

equalizeHist(srcGray, dstGray);

srcGray為原始灰度圖,dstGray為目標灰度圖。

11、threshold閾值操作

函數定義為:

double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type )

src:源圖像。
dst:輸出圖像
thresh:閾值
maxval:dst圖像中最大值。
type:閾值類型,可以具體類型如下:

THRESH_BINARY //大于閾值的部分被置為255,小于部分被置為0。 THRESH_BINARY_INV //大于閾值部分被置為0,小于部分被置為255。 THRESH_TRUNC //大于閾值部分被置為threshold,小于部分保持原樣。 THRESH_TOZERO //小于閾值部分被置為0,大于部分保持不變。 THRESH_TOZERO_INV //大于閾值部分被置為0,小于部分保持不變。 THRESH_BINARY | THRESH_OTSU //利用OTSU自適應閾值。

可以通過如下函數進行閾值操作:

threshold(srcGray, srcGray, 0, 255, THRESH_BINARY | THRESH_OTSU); //或者 threshold(srcGray, srcGray, 50, 255, THRESH_BINARY);

12、line直線繪畫

函數定義為:

void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,int thickness = 1, int lineType = LINE_8, int shift = 0)

img:源圖像。
pt1:起點;
pt2:終點
color:顏色,
thickness:線條粗細,
LINE_8:線條類型
可以通過如下函數進行直線繪畫:

line( img, start, end, Scalar( 0, 0, 0 ), thickness=2, lineType=8 );

13、ellipse橢圓繪畫:

函數定義為:

void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0)

img:源圖像。
center:中心點;
axes:大小
angle:旋轉角,
startAngle, endAngle:起始角度和結束角度
color:顏色
thickness:線條粗細,
LINE_8:線條類型
可以通過如下函數進行橢圓繪畫:

Point center = Point(200,200); Point axes = Point(100,50); ellipse( img, center, axes, angle, 0, 360, Scalar( 255, 0, 0 ), 1);

14、circle圓繪畫:

函數定義為:

void circle(InputOutputArray img, Point center, int radius,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0)

img:源圖像。
center:中心點;
radius:半徑
color:顏色
thickness:線條粗細,
LINE_8:線條類型
可以通過如下函數進行圓繪畫:

Point center = Point(200,200); int r = 6; circle( img, center, r, Scalar( 0, 0, 255 ), 1);

15、rectangle矩形繪畫:

函數定義為:

void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0)

img:源圖像。
pt1:左上角的點;
pt2:右下角的點
color:顏色
thickness:線條粗細,
LINE_8:線條類型
可以通過如下函數進行矩形繪畫:

rectangle( image, Point(0,0), Point(200,200), Scalar( 0, 255, 255 ),thickness = -1, lineType = 8 );

16、fillPoly多邊形繪畫:

函數定義為:

void fillPoly(Mat& img, const Point** pts, const int* npts, int ncontours, const Scalar& color, int lineType = LINE_8, int shift = 0, Point offset = Point())

img:源圖像。
pts:頂點數組;
npts:頂點個數數組
ncontours:幾個多邊形
color:顏色
thickness:線條粗細,
LINE_8:線條類型
第二個參數可通過如下定義:

Point rookPoints[1][20];rookPoint[0][0]=Point(1,1);....const Point* ppt[1]={rookPoints[0]}; int npt[]={20};

可以通過如下函數進行矩形繪畫:

fillPoly( img,ppt,npt,1,Scalar( 255, 255, 255 ),1);

總結

以上是生活随笔為你收集整理的Opencv的使用小教程1——Opencv基础函数汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。