微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

02_opencv_python_图像处理进阶

1  灰度图

import cv2  # opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt  # Matplotlib是RGB
%matplotlib inline 

img=cv2.imread(cat.jpg)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img_gray.shape

  cv2.imshow("img_gray",img_gray)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

分享图片

 

 

 

2  HSV

  • H - 色调(主波长)。
  • S - 饱和度(纯度/颜色的阴影)。
  • V值(强度)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow("hsv",hsv)
cv2.waitKey(0)    
cv2.destroyAllWindows()

分享图片

 

 

3  图像阈值 

参考上篇博客中的 基于颜色提出目标

# 1.将RGB转换成HSV色彩空间
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

# 2.定义数组,说明你要提取(过滤)的颜色目标
# 三通道,所以是三个参数
# 红色
lower_hsv_r = np.array([156,43,46])
upper_hsv_r = np.array([180,255,255]) 
    
# 3.进行过滤,提取,得到二值图像
mask_red = cv2.inRange(hsv,lower_hsv_r,upper_hsv_r)  # 通道数是 1 

3.1  ret,dst = cv2.threshold(src,thresh,maxval,type)

  • src: 输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出
  • thresh: 阈值
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_Trunc; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

  • cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0

  • cv2.THRESH_BINARY_INV THRESH_BINARY的反转
  • cv2.THRESH_Trunc 大于阈值部分设为阈值,否则不变
  • cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
  • cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
ret,thresh1 = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img_gray,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img_gray,cv2.THRESH_Trunc)
ret,thresh4 = cv2.threshold(img_gray,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img_gray,cv2.THRESH_TOZERO_INV)

titles = [Original Image,BINARY,BINARY_INV,Trunc,TOZERO,TOZERO_INV]
images = [img,thresh1,thresh2,thresh3,thresh4,thresh5]

for i in range(6):
    plt.subplot(2,3,i + 1),plt.imshow(images[i],gray)
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

分享图片

 

 

4  图像平滑(利用各种卷积核)

分享图片

img = cv2.imread(lenaNoise.png)  # 椒盐噪音

cv2.imshow(img,img)
cv2.waitKey(0)
cv2.destroyAllWindows()

分享图片

# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img,(3,3))

cv2.imshow(blur,blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 方框滤波
# 基本和均值一样,可以选择归一化
Box = cv2.BoxFilter(img,-1,3),normalize=True)  

cv2.imshow(Box,Box)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian = cv2.GaussianBlur(img,(5,5),1)  

cv2.imshow(aussian,aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 中值滤波
# 相当于用中值代替
median = cv2.medianBlur(img,5)  # 中值滤波

cv2.imshow(median,median)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 展示所有的
res = np.hstack((blur,aussian,median))
#print (res)
cv2.imshow(median vs average,res)
cv2.waitKey(0)
cv2.destroyAllWindows()

分享图片

 

 

5  形态学-腐蚀操作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐