直方图反向投影,2d直方图
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#引入matplotlib模块
from matplotlib import pyplot as plt
#直方图均衡化,用在灰度图上
def back_projection_test():
sample = cv.imread('E:/chenopencvblogimg/zhuqiusample.jpg')
target = cv.imread('E:/chenopencvblogimg/zhuqiu.jpg')
roi_hsv = cv.cvtColor(sample,cv.COLOR_BGR2HSV)
target_hsv = cv.cvtColor(target,cv.COLOR_BGR2HSV)
cv.namedWindow("sample",cv.WINDOW_NORMAL)
cv.imshow("sample",sample)
cv.imshow("target",target)
#roiHist = cv.calcHist([roi_hsv],[0,1],None,[32,32],[0,180,0,256])
roiHist = cv.calcHist([roi_hsv],[0,1],None,[180,256],[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)
#2D直方图
def hist2d_test(img):
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
#hist = cv.calcHist([img],[0,1],None,[32,32],[0,100,0,256])
hist = cv.calcHist([img],[0,1],None,[180,256],[0,100,0,256])
#cv.imshow("hist2d",hist)
plt.imshow(hist,interpolation='nearest')
plt.title("2D Histogram")
plt.show()
def img_test():
img = cv.imread('E:/chenopencvblogimg/lena.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
#hist2d_test(img)
back_projection_test()
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)