膨胀
膨胀被用来增加图像中边缘的大小。首先,我们定义了奇数(5,5)的核矩阵大小。然后使用内核,我们对图像执行膨胀。下面我们对 Canny 算子的输出图像进行了膨胀。
语法
kernel = np.ones((5,5),np.uint8) ## DEFINING KERNEL OF 5x5
imgDialation = cv2.dilate(imgCanny,kernel,iterations=1) ##DIALATION
腐蚀
侵蚀与膨胀正好相反。该算法用于减小图像中边缘的大小。首先,我们定义了奇数(5,5)的核矩阵大小。然后使用内核,我们对图像执行腐蚀。下面我们对 Canny 算子的输出图像进行腐蚀处理。
kernel = np.ones((5,5),np.uint8) ## DEFINING KERNEL OF 5x5
imgDialation = cv2.erode(imgCanny,kernel,iterations=1) ##EROSION
现在,在同一个程序中使用上述基本函数处理 Monalisa 图像。
绘制不同的形状
我们可以使用 OpenCV 绘制不同的形状,像矩形,圆形,线等。
长方形:
要在图像上绘制一个矩形,我们使用 cv2.rectangle 函数。在函数中,我们将宽度、高度、 x、 y、 RGB 中的颜色、深度作为参数传递。
语法
cv2.rectangle(img,(w,h),(x,y),(R,G,B),THICKNESS)
w: width
h: height
x: distance from x axis
y: distance from y axis
R,G,B: color in RGB form (255,255,0)
THICKNESS: thickness of rectangel(integer)Example
cv2.rectangle(img,(100,300),(200,300),(255,0,255),2)
圆形:
为了绘制一个圆形,我们使用 cv2.circle 函数。我们传递 x,y,半径大小,RGB 颜色,深度作为参数。
语法
cv2.circle(img,(x,y),radius,(R,G,B),THICKNESS)
x: distance from x axis
y: distance from y axis
radius: size of radius(integer)
R,G,B: color in RGB form (255,255,0)
THICKNESS: thickness of rectangel(integer)Example
cv2.circle(img,(200,130),90,(255,255,0),2)
直线:
要绘制一条直线,我们使用 cv2.line 函数传递起始点(x1,y1)、终点(x2,y2)、 RGB 格式的颜色、深度作为参数。
语法
cv2.line(img,(x1,y1),(x2,y2),(R,G,B),THICKNESS)x1,y1: start point of line (integer)
x2,y2: end point of line (integer)
R,G,B: color in RGB form (255,255,0)
THICKNESS: thickness of rectangel(integer)Example
cv2.line(img,(110,260),(300,260),(0,255,0),3)
在图像上写文字
在 OpenCV 中,我们有一个函数 cv2.puttext,用于在特定位置在图像上写入文本。它以图像、文本、 x、 y、颜色、字体、字号、粗细作为输入参数。
语法
cv2.putText(img,text,(x,y),FONT,FONT_SCALE,(R,G,B),THICKNESS)
img: image to put text on
text: text to put on image
X: text distance from X axis
Y: text distance from Y axis
FONT: Type of FONT (ALL FONT TYPES)
FONT_SCALE: Scale of Font(Integer)
R,G,B: color in RGB form (255,255,0)
THICKNESS: thickness of rectangel(integer)Example
cv2.putText(img,"HELLO",(120,250),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
检测和裁剪人脸
人脸检测在人脸识别系统中非常有用。在 OpenCV 中,我们有许多预先训练的 haar 级联分类器可用于不同的任务。以下网址可以查看 OpenCV GitHub 上的分类器列表:https://github.com/opencv/opencv/tree/master/data/haarca
scades。
我们使用 haarcascade_frontalface_default.xml 分类器来检测图像中的人脸。它将返回图像的四个坐标(w,h,x,y)。使用这些坐标,我们要在脸上画一个矩形,然后使用相同的坐标,继续裁剪人脸。最后使用 imwrite,把裁剪后的图像保存到目录中。
import cv2
# Load the cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# Read the input image
img = cv2.imread('images/img0.jpg')# Convert into grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Detect faces
faces = face_cascade.detectMultiScale(gray, 1.3, 4)# Draw rectangle around the faces
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Cropping Face
crop_face = img[y:y + h, x:x + w]
#Saving Cropped Face
cv2.imwrite(str(w) + str(h) + '_faces.jpg', crop_face)
cv2.imshow('img', img)
cv2.imshow("imgcropped",crop_face)
cv2.waitKey()
-
C++
+关注
关注
22文章
2108浏览量
73623 -
计算机视觉
+关注
关注
8文章
1698浏览量
45980 -
OpenCV
+关注
关注
31文章
634浏览量
41338
发布评论请先 登录
相关推荐
评论