Open CV系列学习笔记(十)直方图反向投影
反向投影概念
反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式,简单来讲,反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找图像中存在的特征。反向投影在某一位置的值就是原图对应位置像素值在原图像中的总数目。

2D直方图
代码:
def hist2d_demo(image):#2D直方图
hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)
hist = cv.calcHist([image],[0,1],None,[32,32],[0,180,0,256])
cv.imshow("hist2d",hist)
plt.imshow(hist,interpolation="nearest")
plt.title("2D Histogram")
plt.show()
结果:

直方图反向投影
代码;
def back_Proection_demo():
#将图像转化为HSV色彩空间
sample = cv.imread("E:/picture/21.jpg")
target = cv.imread("E:/picture/20.jpg")
roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV)
target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)
cv.imshow("sample", sample)
cv.imshow("target", target)
#求出样本直方图
roiHist = cv.calcHist([roi_hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])
#归一化图像
cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)
#反向投影
dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)
cv.imshow("backProjectionDemo", dst)
#cv.imwrite("./mubiao.jpg", dst)#图片保存
结果:

完整代码;
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def back_Proection_demo():
#将图像转化为HSV色彩空间
sample = cv.imread("E:/picture/21.jpg")
target = cv.imread("E:/picture/20.jpg")
roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV)
target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)
cv.imshow("sample", sample)
cv.imshow("target", target)
#求出样本直方图
roiHist = cv.calcHist([roi_hsv], [0, 1], None, [32, 32], [0, 180, 0, 256])
#归一化图像
cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)
#反向投影
dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)
cv.imshow("backProjectionDemo", dst)
#cv.imwrite("./mubiao.jpg", dst)#图片保存
def hist2d_demo(image):#2D直方图
hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)
hist = cv.calcHist([image],[0,1],None,[32,32],[0,180,0,256])
cv.imshow("hist2d",hist)
plt.imshow(hist,interpolation="nearest")
plt.title("2D Histogram")
plt.show()
print("--------HEllow Python-------")
src = cv.imread("E:/picture/01.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
hist2d_demo(src)
back_Proection_demo()
cv.waitKey(0)
cv.destroyAllWindows()
本文介绍了OpenCV中直方图反向投影的基本概念,通过2D直方图实例演示了如何计算并应用到目标图像上,展示了从HSV色彩空间转换、样本直方图计算到反向投影的完整过程。

被折叠的 条评论
为什么被折叠?



