python opencv单通道转多通道_13、OpenCV绘图和文本显示
我們經常想要繪制各種形狀,為此,OpenCV提供了一系列功能,可以繪制直線,矩形,圓等。OpenCV的繪圖功能適用于圖像,但其中大多數僅影響前三個通道,在單通道圖像的情況下僅默認第一個通道。大多數繪圖支持顏色,厚度,線條類型的修改。
當指定顏色時,使用Scalar對象,大部分只使用前三個值。有時可以使用Scalar中的第四個值來表示alpha通道,但繪圖函數目前不支持alpha混合。另外, OpenCV使用BGR轉換多通道圖像以進行顏色渲染。
繪制功能的厚度和線型參數兩者都是整數,但后者唯一可接受的值是4,8或 LINE_AA等。 厚度是以像素為單位粗細。對于圓形,矩形和所有其他閉合形狀,厚度參數也可以設置為FILLED。在這種情況下,結果是繪制的圖形將以與邊緣相同的顏色填充。lineType參數指示行應該是"4連接","8連接"還是消除鋸齒。
對于繪圖算法,通常將端點(線),中心點(圓),角(矩形)等指定為整數。這些與像素對齊。 在有可用移位的情況下,它為整數參數中的位數,將其視為小數位。 例如,如果想要一個以(5,5)為中心的圓,半徑設置為1,那么這個圓將被畫成(2.5,2.5)。 這種效果通常會非常微妙,并取決于所使用的線型。 對于消除鋸齒的線條效果最明顯。表1是繪制函數
circle()的第一個參數就是圖像。 接下來是中心,二維點和半徑。 其余參數是標準顏色,厚度,線型和移位。
clipLine()此函數用于確定由兩個點pt1和pt2指定的線是否位于矩形邊界內。
ellipse()函數與circle()函數非常相似,主要區別在于Size類型的axes參數。高度和寬度參數表示橢圓的長軸和短軸的長度。角度是從水平逆時針測量的長軸的角度,startAngle和endAngle指示開始和結束的角度。 因此,對于完整的橢圓,必須分別將這些值設置為0和360。
指定橢圓的替代方法是使用邊界框。 在這種情況下, RotatedRect的參數框完全指定了橢圓的大小和方向。。
ellipse2Poly()函數由ellipse()在內部計算橢圓弧,但也可以自己調用它。 給定有關橢圓弧(ellipse()中定義的橢圓弧參數(中心,軸,角度,startAngle和endAngle-all)和指定要采樣的點之間角度的參數信息, ellipse2Poly ()計算一系列點,形成了指定的橢圓弧的多邊形逼近。 計算的點將返回到矢量<> pts中。
fillConvexPoly()函數如果傳遞給它的多邊形具有自相交,則會出錯它將無法正常工作.2 pts中的點被視為順序,并且pts中的最后一點 第一點是隱含的(即,多邊形被假定為關閉)。
fillPoly繪制任意數量的填充多邊形。fillConvexPoly()不同,它可以處理具有自相交的多邊形。
函數line()在圖像中繪制一條從pt1到pt2的直線。 線條會被圖像邊界自動裁剪
rectangle()函數在圖像中繪制一個從pt1到pt2的矩形。
polyLines函數繪制任意數量的未填充多邊形。 它可以處理一般多邊形,包括具有自交叉的多邊形。
putText函數是OpenCV的文本繪制函數; 它只是將一些文本投射到圖像上。 除非bottomLeftOrigin標志為true,否則文本將在文本框的左上角以指示的顏色打印,在這種情況下,文本框的左下角位于原點。 使用的字體由fontFace參數選擇,該參數可以是表3中列出的任何一種。
每種字體都有一個大小。 當fontScale不是1.0時,在繪制文本之前,字體大小由該數字縮放。 圖1顯示了每種字體的示例。
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "iostream"using namespace cv;using namespace std;int main(int argc, char** argv){Mat src = imread("E:/繪制.jpg", 1);namedWindow("原圖", 0);imshow("原圖", src);circle(src, Point2d(100, 100), 100, Scalar(255, 0, 0), 3, 4, 0);ellipse(src, Point2d(350, 100), Size(100, 50), 0, 0, 360, Scalar(0, 255, 0), 3, 8, 0);line(src, Point2d(500, 50), Point2d(600, 100), Scalar(0, 0, 255), 3, 4, 0);rectangle(src, Rect(100, 300, 100, 80), Scalar(255, 255, 0), 3, 4, 0);Point p[2][3] = { { Point(300, 400), Point(400, 380), Point(450, 260) },{ Point(420, 540), Point(540, 300), Point(570,530) } };const Point *pp[] = { p[0], p[1] };int n[] = { 4, 4 };polylines(src, pp,n,1,true, Scalar(0, 255, 255), 3, 8, 0);fillPoly(src, pp, n, 1, Scalar(255, 255, 0),4,0);bool isOk = clipLine(Rect(50, 50, 200, 200), p[0][0], p[0][1]);vector pts;ellipse2Poly(Point(350, 250), Size(200, 150), 30, 0, 200, 4, pts);Point Points[5] = { { 520,550 },{ 578,550 },{ 540,440 },{ 532,432 },{ 500,530 } };fillConvexPoly(src, Points, 5, Scalar(255, 0, 255));putText(src, "OpenCV Draw Graphics And Text",Point(100,100), FONT_HERSHEY_PLAIN, 1.0, Scalar(255, 255, 0));namedWindow("OpenCV繪制圖形和文本演示", 0);imshow("OpenCV繪制圖形和文本演示", src);waitKey(0);return 0;}
總結
以上是生活随笔為你收集整理的python opencv单通道转多通道_13、OpenCV绘图和文本显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery判断方法是否存在_判断图中是
- 下一篇: trainer setup_Detect