8.python-opencv轮廓绘制
第一章 python-opencv-图片导入和显示
第二章 python-opencv图像简单处理
第三章 python-opencv图像mask掩膜处理
第四章 python-opencv图像马赛克
第五章 python-opencv人脸马赛克
第六章 python-opencv人脸检测
第七章 python-opencv图像张贴
前言
本章将主要介绍如何在图像中绘制图案轮廓,主要说明两种形式,第一是如何根据图案颜色提取图案的轮廓,第二是如何手工在图像中绘制轮廓。
一、完整代码
根据图案颜色绘制图案轮廓
import cv2
if __name__ == '__main__':
# 加载图片
img = cv2.imread('./flower.jpg')
# 将图片转化为HSV色彩空间
hsv = cv2.cvtColor(img, code = cv2.COLOR_BGR2HSV)
#根据颜色的值绘制轮廓
lower_red = (156, 60, 60) # 浅红色
upper_red = (180, 255, 255) # 深红色
# 根据红色的上下限进行掩膜处理
mask = cv2.inRange(hsv, lower_red, upper_red)
# 将img根据mask进行按位与操作
res = cv2.bitwise_and(img, img, mask = mask)
cv2.imshow('xin', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
手工绘制轮廓
import cv2
import numpy as np
if __name__ == '__main__':
# 加载图片
img = cv2.imread('./flower.jpg')
# 转化为HSV色彩空间
hsv = cv2.cvtColor(img, code = cv2.COLOR_BGR2HSV)
#手工绘制轮廓
# 获得图片的高度、宽度和通道数
h, w, c = img.shape
# 绘制与图片尺寸相同的掩膜
mask = np.zeros((h,w), dtype = np.uint8)
# 确定轮廓横坐标
x_data = np.array([124,169,208,285,307,260,175]) # 横坐标
# 确定轮廓纵坐标
y_data = np.array([205,124,135,173,216,311,309]) #纵坐标
# 横纵坐标合并
pts = np.c_[x_data, y_data]
# 多边形填充
cv2.fillPoly(mask, [pts], (255))
# 按位与运算
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('xin', res)
cv2.waitKey(0)
cv2.destroyAllWindows()