OpenCV通过HSV颜色空间过滤图片及目标检测颜色空间范围确定

版权声明:本文为博主原创文章,转载请注明出处:https://blog.csdn.net/qq_31261509 https://blog.csdn.net/qq_31261509/article/details/84894182

在目标检测中,我们可以通过卷积网络进行目标检测,但实际上,卷积网络并不能完全正确。所以,我们可以通过其它方式进行筛选,比如颜色空间


参考:

Image Segmentation Using Color Spaces in OpenCV + Python




目标的颜色空间范围确定


  • 通过matplotlib三维化所识别的目标颜色空间在HSV上的分布。然后设置lower_red以及upper_red设置颜色的阈值范围
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
frame = cv2.imread("/home/rui/fire/demo.jpg")
# BGR空间转换到HSV颜色空间
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 分割通道
h, s, v = cv2.split(hsv)
fig = plt.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d")

pixel_colors = frame.reshape((np.shape(hsv)[0]*np.shape(hsv)[1], 3))
norm = colors.Normalize(vmin=-1, vmax=1.)
norm.autoscale(pixel_colors)
pixel_colors = norm(pixel_colors).tolist()

axis.scatter(h.flatten(), s.flatten(), v.flatten(), facecolors=pixel_colors,marker=".")
axis.set_xlabel("Hue")
axis.set_ylabel("Saturation")
axis.set_zlabel("Value")
plt.show()


lower_red = np.array([10, 100, 0])
upper_red = np.array([90, 250,255])

mask = cv2.inRange(hsv, lower_red, upper_red)

res = cv2.bitwise_and(frame, frame, mask=mask)

cv2.imshow("frame", frame)
cv2.imshow("mask", mask)
cv2.imshow("res", res)
cv2.waitKey(0)

猜你喜欢

转载自blog.csdn.net/qq_31261509/article/details/84894182