(转载) Python-OpenCV 处理图像(四):图像直方图和反向投影

系列文章目录

当我们想比较两张图片相似度的时候,可以使用这一节提到的技术

关于这两种技术的原理可以参考我上面贴的链接,下面是示例的代码:

0x01. 绘制直方图

0x02. 反向投影

Python
import cv2.cv as cv im = cv.LoadImage("img/lena.jpg", cv.CV_8U) cv.SetImageROI(im, (1, 1,30,30)) histsize = 256 #Because we are working on grayscale pictures hist = cv.CreateHist([histsize], cv.CV_HIST_ARRAY, [[0,histsize]], 1) cv.CalcHist([im], hist) cv.NormalizeHist(hist,1) # The factor rescale values by multiplying values by the factor _,max_value,_,_ = cv.GetMinMaxHistValue(hist) if max_value == 0: max_value = 1.0 cv.NormalizeHist(hist,256/max_value) cv.ResetImageROI(im) res = cv.CreateMat(im.height, im.width, cv.CV_8U) cv.CalcBackProject([im], res, hist) cv.Rectangle(im, (1,1), (30,30), (0,0,255), 2, cv.CV_FILLED) cv.ShowImage("Original Image", im) cv.ShowImage("BackProjected", res) cv.WaitKey(0)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import cv2 . cv as cv
 
im = cv . LoadImage ( "img/lena.jpg" , cv . CV_8U )
 
cv . SetImageROI ( im , ( 1 , 1 , 30 , 30 ) )
 
histsize = 256 #Because we are working on grayscale pictures
hist = cv . CreateHist ( [ histsize ] , cv . CV_HIST_ARRAY , [ [ 0 , histsize ] ] , 1 )
cv . CalcHist ( [ im ] , hist )
 
 
cv . NormalizeHist ( hist , 1 ) # The factor rescale values by multiplying values by the factor
_ , max_value , _ , _ = cv . GetMinMaxHistValue ( hist )
 
if max_value == 0 :
     max_value = 1.0
cv . NormalizeHist ( hist , 256 / max_value )
 
cv . ResetImageROI ( im )
 
res = cv . CreateMat ( im . height , im . width , cv . CV_8U )
cv . CalcBackProject ( [ im ] , res , hist )
 
cv . Rectangle ( im , ( 1 , 1 ) , ( 30 , 30 ) , ( 0 , 0 , 255 ) , 2 , cv . CV_FILLED )
cv . ShowImage ( "Original Image" , im )
cv . ShowImage ( "BackProjected" , res )
cv . WaitKey ( 0 )

猜你喜欢

转载自blog.csdn.net/dugu_00/article/details/80280657