图像ROI与ROI操作
图像的ROI(region of interest)是指图像中感兴趣区域、在OpenCV中图像设置图像ROI区域,实现只对ROI区域操作。
矩形ROI区域提取
矩形ROI区域copy
不规则ROI区域
-
ROI区域mask生成
-
像素位 and操作
-
提取到ROI区域
-
加背景or操作
-
add 背景与ROI区域
获取规则ROI区域
h,w=src.shape[:2]
#获取ROI
cx=w//2
cy=h//2
roi=src[cy-100:cy+100,cx-100:cx+100]
#copy ROI
image = np.copy(roi)
#modify ROI
roi[:,:,0]=0
#modify copy ROI
image[:,:,2]=0
获取不规则ROI区域
src2=cv.imread("D:/greenback.png")
cv.imshow("src2",src2)
hsv=cv.cvtColor(src2,cv.COLOR_BGR2HSV)
mask=cv.inRange(hsv,(35,43,46),(77,255,255))#取绿色背景
mask=cv.bitwise_not(mask)#mask生成
person=cv.bitwise_and(src2,src2,mask=mask)
result=np.zeros(src2.shape,src2.dtype)
result[:,:,0]=255
mask=cv.bitwise_not(mask)#转为操作背景
dst=cv.bitwise_or(result,person,mask=mask)#蓝色背景
dst=cv.add(dst,person)#将人加到蓝色背景上
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()
图像直方图
图像直方图是图像像素值的统计学特征、计算代价较小,具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类、反向投影跟踪。
常见的分为
- 灰度直方图
- 颜色直方图
Bins是指直方图的大小范围, 对于像素值取值在0~255之间的,最多有256个bin,此外还可以有16、32、48、128等,256除以bin的大小应该是整数倍。
若bin为128,则将值为0和1的像素统计在一起,依次类推
OpenCV中相关API
calcHist(&bgr_plane[0], 1, 0, Mat(), b_hist, 1, bins, ranges);
cv.calcHist([image], [i], None, [256], [0, 256])
def image_hist(image):
cv.imshow("input",image)
color=('blue','green','red')
for i,color in enumerate(color):
hist = cv.calcHist([image],[i],None,[256],[0,256])
plt.plot(hist,color=color)
plt.xlim([0,256])
plt.show()
直方图均衡化
图像直方图均衡化可以用于图像增强、对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见。此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量。
直方图均衡化的API
- qualizeHist(src, dst)
图像直方图比较
图像直方图比较,就是计算两幅图像的直方图数据,比较两组数据的相似性,从而得到两幅图像之间的相似程度,直方图比较在早期的CBIR中是应用很常见的技术手段,通常会结合边缘处理、词袋等技术一起使用。
OpenCV中直方图比较的API
- compareHist(hist1, hist2, method)
常见比较方法有
- 相关性
- 卡方
- 交叉
- 巴氏
直方图反向投影
图像直方图反向投影
文字解释:
图像直方图反向投影是通过构建指定模板图像的二维直方图空间与目标的二维直方图空间,进行直方图数据归一化之后, 进行比率操作,对所有得到非零数值,生成查找表对原图像进行像素映射之后,再进行图像模糊输出的结果。
直方图反向投影流程:
- 计算直方图
- 计算比率R
- LUT查找表
- 卷积模糊
- 归一化输出
相关API
- calcBackProject