open-cv zeichnet einfache Formen line() Circle() Rechteck() Polylinien() putText() cvtColor()

Ein Pixel in einem OpenCV-Farbbild ist nach dem „ BGR “-Muster organisiert .
Einige öffentliche Parameter der Zeichenfunktion:
img : Bildobjektfarbe :
Farbe . Wenn die Farbe durch ein Triplett dargestellt wird, sind die Elemente des Tripletts nach BGR organisiert . Im Triplett (0,255,0) ist B 0 und G ist 255. R ist 0, also steht es für reines Grün. Wenn es sich um Graustufen handelt, wird es durch einen einzelnen Wert dargestellt.
Dicke : Linienbreite.
Punkt : Punktposition, dargestellt durch ein Tupel.
lineType : Linientyp. Beim Zeichnen von Kurven wird normalerweise CV2.LINE_AA verwendet, um bessere Glättungseffekte zu erzielen.

1.

Linie cv2.line()
Der erste Parameter ist die zu zeichnende Bildinstanz.
Der zweite Parameter ist der Startpunkt, ein Tupel. Der
dritte Parameter ist der Endpunkt, ein Tupel. Der
vierte Parameter ist die Farbe
. Der fünfte Parameter ist die Linienbreite.

先用numpy构建一个512×512大小的纯白色图片对象:img = np.ones((512,512,3))
起点选在start=(50,50),终点选择stop=(300,300),颜色设置为红色color=(0,0,255),线宽thick=5import cv2
import numpy as np
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
img = np.ones((512,512,3))
#img = np.zeros((512,512)) #黑色背景
#img = np.ones((512,512)) #白色背景
start=(50,50)
stop=(300,300)
color=(0,0,255)
thick=5
cv2.line(img,start,stop,color,thick)
cv2.imshow('img',img)
cv2.waitKey()

2

.Circle cv2.circle()
Der erste Parameter ist das Bildobjekt,
der zweite Parameter ist der Mittelpunkt des Kreises,
der dritte Parameter ist der Radius,
der vierte Parameter ist die Farbe,
der fünfte Parameter ist die Linienbreite. Wenn Sie -1 verwenden, wird dies der Fall sein Füllt automatisch das Innere des Kreises aus. ;

import cv2
import numpy as np
img = np.ones((512,512,3)) #白色背景
center=(100,100)
radius=50
color=(0,255,255)  #黄色
cv2.circle(img,center, radius, color, 5) #线条

center=(200,200)
cv2.circle(img,center, radius, color, -1) #填充
cv2.imshow('img',img)
 
cv2.waitKey()

3.

Quadrat cv2.rectangle()
Der erste Parameter ist das Bildobjekt,
der zweite Parameter sind die Koordinaten der oberen linken Ecke des Quadrats, der
dritte Parameter sind die Koordinaten der unteren rechten Ecke des Quadrats und die Breite und Höhe des Quadrats werden automatisch berechnet basierend auf den Koordinaten des Startpunkts;
der vierte Parameter ist die Farbe;
der fünfte Parameter Der Parameter ist die Linienbreite. Wenn -1 verwendet wird, wird das Innere des Kreises automatisch ausgefüllt;

import cv2
import numpy as np
img = np.ones((512,512,3)) #白色背景

topleft=(10,100)
downright=(111,333)
color=(255,0,0)  #蓝色
cv2.rectangle(img,topleft, downright, color, 2) #线条

topleft=(300,100)
downright=(500,300)
color=(0,255,0)  #蓝色
cv2.rectangle(img,topleft, downright, color, -1) #填充

cv2.imshow('juzicode',img)
 
cv2.waitKey()

4

Polygoncv2.polylines()

import cv2
import numpy as np
img = np.ones((512,512,3)) #白色背景
color=(0,255,0)  #绿色
#五角星
pts = np.array([[70,190],[222,190],[280,61],[330,190],[467,190],
     [358,260],[392,380],[280,308],[138,380],[195,260]])
pts = pts.reshape((-1,1,2))  #reshape为10x1x2的numpy
print(pts.shape)     # (10, 1, 2)
cv2.polylines(img,[pts],True,color,5)
#方形
pts = np.array([[10,50],[100,50],[100,100],[10,100]])
pts = pts.reshape((-1,1,2))#-1 表示自适应该维度大小。

这里 reshape 的第一个参数为-1, 表明这个参数是根据后面的维度1X2的计算出来的。
比如如果一个 array有 NX1X2个元素,那么它的 reshape(-1, 1, 2) 方法将返回一个 shape = (n, 1, 2) 的 ndarray.

cv2.polylines(img,[pts],True,color,3)
 
cv2.imshow('juzicode.com',img)
cv2.waitKey()

5.

Ausgabetext: cv2.putText()
Der erste Parameter ist das Bildobjekt;
der zweite Parameter ist die auszugebende Zeichenfolge; der
dritte Parameter ist die Startpunktposition;
der vierte Parameter ist die Schriftart; der
fünfte Parameter ist die Schriftgröße;
der sechste Parameter ist die Farbe;
der 7. Parameter ist die Linienbreite, der Standardwert ist 1;
der 8. Parameter ist der Linientyp, der Standardwert ist LINE8;

import cv2
import numpy as np
img = np.ones((512,512,3)) #白色背景
text = 'VX:juzicode'
start = (10,200) 
font = cv2.FONT_HERSHEY_SIMPLEX
fontscale = 2
color=(0,0,255)  #红色
thick = 2
linetype = cv2.LINE_AA
cv2.putText(img,text,start, font, fontscale, color,thick,linetype)
 
cv2.imshow('juzicode.com',img)
cv2.waitKey()

OpenCV enthält keine chinesischen Schriftarten. Eine Problemumgehung besteht darin, chinesische Zeichen nach der Konvertierung über Pillow anzuzeigen:

import cv2
import numpy as np
from PIL import Image,ImageDraw,ImageFont
img = np.full((512,512,3),255,np.uint8) #白色背景
img_pil = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

text = 'VX:图片code'
start = (10,200)      #起始位置
fonttype = 'msyh.ttc' #微软雅黑字体,和具体操作系统相关
fontscale = 30        #字体大小
font = ImageFont.truetype(fonttype,fontscale)
draw = ImageDraw.Draw(img_pil)
draw.text(start,text,font=font,fill=(255,0,0))  #PIL中BGR=(255,0,0)表示红色
img_ocv = np.array(img_pil)                     #PIL图片转换为numpy
img = cv2.cvtColor(img_ocv,cv2.COLOR_RGB2BGR)   #PIL格式转换为OpenCV的BGR格式
cv2.imshow('tupian',img)
cv2.waitKey()


cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片
,p2是转换成何种格式。
cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片

おすすめ

転載: blog.csdn.net/aqiangdeba/article/details/129753466