赞
踩
提示:深度学习中涉及到的opencv图像处理知识点及代码运用。主要分为功能运用+知识点补充
内容持续更新ing。。。
# coding=gbk import cv2 img = cv2.imread("8691.jpg") #转化为灰度图,提取灰度阈值为117-255的感兴趣区域 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # threshold函数返回的第一个参数为阈值,第二个为结果图像 ret, binary = cv2.threshold(gray, 117, 255, cv2.THRESH_BINARY) contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0, 0, 255), 2) #通过轮廓返回值contours绘制轮廓,指定轮廓为所以轮廓红色厚度为2的轮廓 print(contours, hierarchy) cv2.imshow("img", img) cv2.waitKey(0)
cv2.THRESH_BINARY:
二值化阈值处理会将原始图像处理为仅有两个值的二值图像,其针对像素点的处理方式为:在8位图像中,最大值是255。因此,在对8位灰度图像进行二值化时,如果将阈值设定为127,那么:所有大于127的像素点会被处理为255。 其余值会被处理为0。
cv2.findContours() 返回轮廓本身和每条轮廓对应的属性 。
- 第一个参数是寻找轮廓的图像;
- 第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
cv2.RETR_EXTERNAL 表示只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系
cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE 建立一个等级树结构的轮廓。- 第三个参数method为轮廓的近似办法
cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法
# coding=gbk import cv2 # 读取图片并缩放方便显示 img = cv2.imread(r'D:\y\XM\yolov5-master\mydata1\images\train\000010.png') height, width = img.shape[:2] size = (int(width * 0.5), int(height * 0.5)) # 缩放 img = cv2.resize(img, size, interpolation=cv2.INTER_AREA) # BGR转化为HSV HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 鼠标点击响应事件 def getposHsv(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: print("HSV is", HSV[y, x]) def getposBgr(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: print("Bgr is", img[y, x]) cv2.imshow("imageHSV", HSV) cv2.imshow('image', img) cv2.setMouseCallback("imageHSV", getposHsv) cv2.setMouseCallback("image", getposBgr) cv2.waitKey(0)
# coding=gbk import cv2 import numpy as np img=cv2.imread(r'D:\y\XM\yolov5-master\mydata1\images\train\000010.png') #转化为HSV格式 HSV=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #设定hsv上下限,获取范围内的mask码 lower=np.array([10,95,35]) # 黄色下 upper=np.array([45,200,255]) #黄色上 lower1=np.array([10,95,35]) #白色下 upper1=np.array([45,200,255]) #白色上 mask=cv2.inRange(HSV,lower,upper) # 提取黄色掩码 mask1=cv2.inRange(HSV,lower1,upper1) #提取白色掩码 mask2= mask+mask1 #合并黄色和白色掩码 #膨胀腐蚀操作 # kernel = np.array([[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1], # [1,1,1,1,1],[1,1,1,1,1]],dtype = np.uint8)/25 #高斯自定义5*5的卷积核 # erosion = cv2.erode(mask,kernel,iterations = 1) #膨胀 # dilation = cv2.dilate(mask,kernel,iterations = 1) #腐蚀 # opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) #开运算,先腐蚀再膨胀。 # mask2 = cv2.morphologyEx(mask2, cv2.MORPH_CLOSE, kernel) #闭运算,先膨胀再腐蚀。 #将掩码与原图像合并提取 result=cv2.bitwise_and(img,img,mask=mask2) # #掩码与原图像取反 # result=cv2.bitwise_not(img,img,mask=mask2) cv2.imshow('img',img) cv2.imshow('mask',mask) cv2.imshow('mask1',mask1) cv2.imshow('mask2',mask2) cv2.imshow('result',result) cv2.waitKey(0) cv2.destroyAllWindows()
HSV颜色模型
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。、这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。
色调H:简单理解为什么颜色。用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S:简单理解为颜色深浅。取值范围为0.0~1.0;
亮度V:简单理解为颜色明暗。取值范围为0.0(黑色)~1.0(白色)。
HSV颜色分量范围
一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。
H: 0— 180
S: 0— 255
V: 0— 255
此处把部分红色归为紫色范围:
RGB与HSV的转换
在计算机视觉中,出于各种原因(例如对照明变化的鲁棒性或消除阴影),通常希望将颜色分量与强度分开。HSV在进行色彩分割时作用比较大。他包含着比RGB更多的色彩信息。通过阈值的划分,颜色能够被区分出来。
【RGB TO HSV】
def rgb2hsv(r, g, b): r, g, b = r/255.0, g/255.0, b/255.0 mx = max(r, g, b) mn = min(r, g, b) df = mx-mn if mx == mn: h = 0 elif mx == r: h = (60 * ((g-b)/df) + 360) % 360 elif mx == g: h = (60 * ((b-r)/df) + 120) % 360 elif mx == b: h = (60 * ((r-g)/df) + 240) % 360 if mx == 0: s = 0 else: s = df/mx v = mx return h, s, v
【HSV To RGB】
def hsv2rgb(h, s, v): h = float(h) s = float(s) v = float(v) h60 = h / 60.0 h60f = math.floor(h60) hi = int(h60f) % 6 f = h60 - h60f p = v * (1 - s) q = v * (1 - f * s) t = v * (1 - (1 - f) * s) r, g, b = 0, 0, 0 if hi == 0: r, g, b = v, t, p elif hi == 1: r, g, b = q, v, p elif hi == 2: r, g, b = p, v, t elif hi == 3: r, g, b = p, q, v elif hi == 4: r, g, b = t, p, v elif hi == 5: r, g, b = v, p, q r, g, b = int(r * 255), int(g * 255), int(b * 255) return r, g, b
【HSV 距离计算】
def HSVDistance(hsv_1,hsv_2): H_1,S_1,V_1 = hsv_1 H_2,S_2,V_2 = hsv_2 R=100 angle=30 h = R * math.cos(angle / 180 * math.pi) r = R * math.sin(angle / 180 * math.pi) x1 = r * V_1 * S_1 * math.cos(H_1 / 180 * math.pi); y1 = r * V_1 * S_1 * math.sin(H_1 / 180 * math.pi); z1 = h * (1 - V_1); x2 = r * V_2 * S_2 * math.cos(H_2 / 180 * math.pi); y2 = r * V_2 * S_2 * math.sin(H_2 / 180 * math.pi); z2 = h * (1 - V_2); dx = x1 - x2; dy = y1 - y2; dz = z1 - z2; return math.sqrt(dx * dx + dy * dy + dz * dz)
相关资源:
python–RGB转HSV_Ken的博客-CSDN博客_python rgb转hsv
OpenCV中HSV颜色模型及颜色分量范围 - wangyblzu - 博客园
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。