本文共 2158 字,大约阅读时间需要 7 分钟。
1,ROI
感兴趣区(Region of Interest,ROI) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法生成。机器视觉、图像处理中,感趣区可以是从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,通常用来作为图像分类的样本、掩膜、裁剪区或及其他操作。 源代码:import cv2 as cvimport numpy as npsrc = cv.imread("F:/images/lena.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)cv.imshow("input image", src)ROI = src[50:250, 100:300] #假设我们对她的帽子感兴趣,指定宽高的区域gray = cv.cvtColor(ROI, cv.COLOR_BGR2GRAY) #转换成灰度图backROI = cv.cvtColor(gray, cv.COLOR_GRAY2BGR) #还原为RGB图src[50:250, 100:300] = backROI #重新置在原图中(ROI操作)cv.imshow("hat", src)cv.waitKey(0)cv.destroyAllWindows()
运行结果:
2,泛洪填充算法(Flood Fill Algorithm)
泛洪填充算法又称洪水填充算法,是在很多图形绘制软件中常用的填充算法,最熟悉不过就是windows paint的油漆桶功能。算法的原理很简单,就是从一个点开始附近像素点,填充成新的颜色,直到封闭区域内的所有像素点都被填充新颜色为止。泛红填充实现最常见有四邻域像素填充法,八邻域像素填充法,基于扫描线的像素填充方法。根据实现又可以分为递归与非递归(基于栈)。所谓的floodFill 漫水填充就是在一张图片中,和种子点像素相差在[-loDiff,+upDiff]的时候就用newVal来填充这个点。
def floodFill(image, mask, seedPoint, newVal, loDiff=None, upDiff=None, flags=None):1.操作的图像, 2.掩码, 3.起始像素值, #我们指定的第一个点的三个通道值4.填充的颜色, 5.填充颜色的低值, 参数3的三通道值 减去 参数5 #低值三通道6.填充颜色的高值 , 参数3的三通道值 加上 参数6 #高值三通道7.填充的方法 #彩色图像一般是FLOODFILL_FIXED_RANGE 指定颜色填充;还有一种是FLOODFILL_MASK_ONLY,mask的指定的位置为零时才填充,不为零不填充
源代码:
import cv2 as cvimport numpy as npdef fill_color_demo(image): copyImg = image.copy() #拷贝原图像 h, w = image.shape[:2] #返回高和宽 mask = np.zeros([h+2, w+2], np.uint8) #+2是为了使边缘像素也被修改 cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE) cv.imshow("fill_color_demo", copyImg)def fill_binary(): image = np.zeros([400, 400, 3], np.uint8) image[100:300, 100:300, : ] = 255 cv.imshow("fill_binary", image) mask = np.ones([402, 402, 1], np.uint8) #为1不填充,为0才进行填充,默认mask是单通道的,通道数1可写可不写 mask[101:301, 101:301] = 0 #加一的原因是mask[h+2,w+2],imge原来的ROI区域对应的是mask[+1,+1]的区域 cv.floodFill(image, mask, (200, 200), (100, 2, 255), cv.FLOODFILL_MASK_ONLY) # 最好写到我们填充的图像中间 cv.imshow("filled binary", image)src = cv.imread("F:/images/lena.png")cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)cv.imshow("input image", src)fill_color_demo(src)fill_binary()cv.waitKey(0)cv.destroyAllWindows()
运行结果:
彩色填充 二值填充转载地址:http://oxhwi.baihongyu.com/