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。
其可以取得如下值:
實際上這些標志位存儲在一個名為ImreadModes的枚舉量里。
在實際使用時可以通過如下函數進行圖片讀取:
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表示插值方式,共有以下幾種插值方法:
在實際應用中可以通過如下方式進行應用:
//從相機捕獲一幀圖像 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用于圖像克隆,也就是圖像復制。在實際應用中可以復制圖像,在進行修改時可以不修改原圖。
通過如下方式可以實現圖像克隆。
5、cvtColor
cvtColor用于圖像的類型轉換。如BGR圖轉換為灰度圖,RGB圖轉化為BGR圖等。
通過如下方式可以實現圖像的類型轉換。
常用的轉化碼如下:
CV_BGR2RGB //在RGB或BGR色彩空間之間轉換 CV_RGB2BGRCV_RGB2GRAY //RGB或者BGR色彩空間與灰度空間轉換 CV_BGR2GRAY CV_GRAY2RGB CV_GRAY2BGRCV_RGB2RGBA //加入alpha通道或者刪除alpha通道 CV_BGR2BGRA CV_RGBA2RGB CV_BGRA2BGR6、Scalar
Scalar(int,int,int);表示每個通道的數值,常常在建立空圖片的時候使用。
使用方式如下所示,其可以建立三個圖像:
7、獲取像素點的值
可以通過如下函數獲得像素點的值:
int pixel = image.at<Vec3b>(0, 0)[0];如上代表獲取第i行,第j列,0為第一通道,1為第二通道,2為第三通道,若要獲取透明通道則要Vec4b。
8、Rect
Rect用于獲得矩形,其一共有四個輸入值,分別是左上角坐標x,y,寬,高。
可以通過如下函數建立一個矩形:
此時建立了一個分辨率為(640,400)的矩形。注意的是,函數中640是矩形的寬度,不是右下角的坐標。
9、截取Rect部分圖像
Rect用于獲得矩形,通過特定的函數可以獲得該部分的圖像。
假設原圖變量為image
可以通過如下函數獲得部分圖像:
通過該方式獲得了一個左上角位于image(200,200)位置,分辨率為(200,200)的圖像。
10、equalizeHist直方圖均衡化
均衡化的圖像相比于原圖有明顯的增強,可用于增強原圖的可觀測性。
可以通過如下函數進行直方圖均衡化:
srcGray為原始灰度圖,dstGray為目標灰度圖。
11、threshold閾值操作
函數定義為:
double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type )src:源圖像。
dst:輸出圖像
thresh:閾值
maxval:dst圖像中最大值。
type:閾值類型,可以具體類型如下:
可以通過如下函數進行閾值操作:
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:線條類型
可以通過如下函數進行直線繪畫:
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:線條類型
可以通過如下函數進行橢圓繪畫:
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:線條類型
可以通過如下函數進行圓繪畫:
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:線條類型
可以通過如下函數進行矩形繪畫:
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:線條類型
第二個參數可通過如下定義:
可以通過如下函數進行矩形繪畫:
fillPoly( img,ppt,npt,1,Scalar( 255, 255, 255 ),1);總結
以上是生活随笔為你收集整理的Opencv的使用小教程1——Opencv基础函数汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序-炫酷手持滚动弹幕生成小工具
- 下一篇: 海外知网网址