OpenCV学习1

形态学变换

cv2.morphologyEx(需要变换的图片, 选择变换方法, 核(kernel))

形态学变换(Morphological Transformations)是一种基于形状的简单变换,它的处理对象通常是二值化图像。

1.核(kernel)

一个结构化元素,通常为3x3,5x5,7x7大小的矩阵。核拥有自己的结构,比如矩形(矩阵中元素全为1),椭圆(元素为1的构成一个椭圆,其他位置为0),十字形等,可以根据具体的需求选择。

2.腐蚀

以一个核的中心对应图像的每一个像素点,依次从左到右,从上到下遍历整个图像。在二值图像中如果核覆盖的区域(由核的大小决定)其中某一个位置的值为0,那么这个核的中心点的值,也就是该像素点的值就更改为0(黑色)。只有当核覆盖的整个区域的值都不为0时,及都为白色时,该像素点的值才为白色,如此遍历图像的每一个点。

作用:腐蚀操作能够逐步收缩目标物体边界,消除孤立的噪声像素以及细化连续的目标区域(前景区域)。

3.膨胀

与腐蚀的过程相似,但是值的变化不同,当核覆盖的区域存在一个像素点是白色的时,那么核的中心点,也就是当前遍历的像素点的值就为1(白色)。只有当核覆盖的区域全部为0(黑)时,该像素点的值才为0.

作用:膨胀操作能够逐步扩大目标物体边界,连接断裂的前景部分,并填充内部空洞,使得物体轮廓更加明显且连续。

4.开运算

先腐蚀再膨胀

作用:消除噪点,去除小的杂质,而不影响图像的主体

5.闭运算

先膨胀再腐蚀

作用:消除图像中的小坑洞,连接有细小裂缝的图像区域

6.礼帽运算

原图像与开运算结果图像之差,可以查看到开运算去除的小杂质

7.黑帽运算

原图像与闭运算结果图像之差,可以查看到原图像中的细小坑洞,裂缝等

8.形态学梯度

膨胀后图像与腐蚀后图像之差,通过比较原图像与膨胀图和腐蚀图之间的差异来突出图像边缘特征。

import cv2
import numpy as np

im = cv2.imread("./my_images/car4.png")

kernel = np.ones((5, 5), dtype=np.uint8)
# 腐蚀
im_erode = cv2.erode(im, kernel, iterations=1)
# 膨胀
im_dilate = cv2.dilate(im, kernel, iterations=1)
# 开运算
im_open = cv2.morphologyEx(im, cv2.MORPH_OPEN, kernel)
# 闭运算
im_close = cv2.morphologyEx(im, cv2.MORPH_CLOSE, kernel)
# 礼帽运算
im_tophat = cv2.morphologyEx(im, cv2.MORPH_TOPHAT, kernel)
# 黑帽运算
im_blackhat = cv2.morphologyEx(im, cv2.MORPH_BLACKHAT, kernel)
# 形态学梯度(膨胀图像与腐蚀图像之差)
im_gradient = cv2.morphologyEx(im, cv2.MORPH_GRADIENT, kernel)

cv2.imshow("im_erode", im_erode)
cv2.imshow("im_dilate", im_dilate)
cv2.imshow("im_open", im_open)
cv2.imshow("im_close", im_close)
cv2.imshow("im_tophat", im_tophat)
cv2.imshow("im_blackhat", im_blackhat)
cv2.imshow("im_gradient", im_gradient)
cv2.waitKey(0)



图像颜色识别

计算机常用的颜色空间,RGB,HSV

颜色加法

图像可以使用numpy中的矩阵加法,也可以使用opencv中的加法运算(加法和加权加法)

区别:如果超出uint8的范围,numpy采用取模的操作,而opencv则是饱和操作(超出255,视为255)

import cv2
import numpy as np

im = cv2.imread("./my_images/pig.png")
im1 = cv2.imread("./my_images/cao.png")

# numpy矩阵直接相加
im_np = im + im1
# 使用opencv中的add相加
im_add = cv2.add(im, im1)
# 加权加法
im2 = cv2.addWeighted(im, 0.3, im1, 0.7, 0)

cv2.imshow("im_np", im_np)
cv2.imshow("im_add", im_add)
cv2.imshow("im2", im2)
cv2.waitKey(0)


HSV颜色空间

HSV颜色空间使用色调(Hue)、饱和度(Saturation)和亮度(Value)三个参数来表示颜色,色调H表示颜色的种类,如红色、绿色、蓝色等;饱和度表示颜色的纯度或强度,如红色越纯,饱和度就越高;亮度表示颜色的明暗程度,如黑色比白色亮度低。

在这里插入图片描述

优点:

降维处理有利于计算:在图像处理中,降维处理可以减少计算的复杂性和计算量。HSV颜色空间相对于RGB颜色空间,减少了两个维度(红、绿、蓝),这有利于进行一些计算和处理任务,比如色彩分割、匹配等。

图像颜色识别替换

掩膜:一种在图像处理中常见的操作,它用于选择性地遮挡图像的某些部分,以实现特定任务的目标,通常为二值图像(黑,白)

与运算:逻辑运算的一种,例如255&221,在二进制中分别为11111111和11011101,两个数按位进行与运算,同真为真,一假具假

颜色识别:将图像转换为HSV空间,通过对像素值的范围判断,识别对应的颜色

颜色替换:通过制作掩膜,掩膜的大小与原图大小一致,元素一一对应,可以按照掩膜中的坐标对应修改像素值,从而达到替换颜色的目的

import cv2
import numpy as np

im = cv2.imread("./my_images/demo.png")
im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
# 制作掩膜
lower = np.array([26, 43, 46])
upper = np.array([34, 255, 255])
# 原图像进行与运算,获得识别后的图像
#im1 = cv2.bitwise_and(im, im, mask=mask)

mask = cv2.inRange(im_hsv, lower, upper)
# 颜色替换
im[mask == 255] = (0, 255, 0)

cv2.imshow("im", im)
cv2.imshow("mask", mask)
cv2.waitKey(0)

ROI切割

与numpy中数组元素的切片相同

import cv2
import numpy as np

im = cv2.imread("./my_images/1.png")

# ROI切割
im_roi = im[300:600, 300:600]
cv2.imshow("im_roi", im_roi)
cv2.waitKey(0)

numpy中数组元素的切片相同

import cv2
import numpy as np

im = cv2.imread("./my_images/1.png")

# ROI切割
im_roi = im[300:600, 300:600]
cv2.imshow("im_roi", im_roi)
cv2.waitKey(0)

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值