栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

推土机距离的Python代码

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

推土机距离的Python代码

OpenCv for
Python中有一个出色的实现。该函数的名称为CalcEMD2,用于比较两个图像直方图的简单代码如下所示:

#import OpenCv libraryfrom cv2 import *### HISTOGRAM FUNCTION #########################################################def calcHistogram(src):    # Convert to HSV    hsv = cv.CreateImage(cv.GetSize(src), 8, 3)    cv.CvtColor(src, hsv, cv.CV_BGR2HSV)    # Extract the H and S planes    size = cv.GetSize(src)    h_plane = cv.CreateMat(size[1], size[0], cv.CV_8UC1)    s_plane = cv.CreateMat(size[1], size[0], cv.CV_8UC1)    cv.Split(hsv, h_plane, s_plane, None, None)    planes = [h_plane, s_plane]    #Define numer of bins    h_bins = 30    s_bins = 32    #Define histogram size    hist_size = [h_bins, s_bins]    # hue varies from 0 (~0 deg red) to 180 (~360 deg red again */    h_ranges = [0, 180]    # saturation varies from 0 (black-gray-white) to 255 (pure spectrum color)    s_ranges = [0, 255]    ranges = [h_ranges, s_ranges]    #Create histogram    hist = cv.CreateHist([h_bins, s_bins], cv.CV_HIST_ARRAY, ranges, 1)    #Calc histogram    cv.CalcHist([cv.GetImage(i) for i in planes], hist)    cv.NormalizeHist(hist, 1.0)    #Return histogram    return hist### EARTH MOVERS ############################################################def calcEM(hist1,hist2,h_bins,s_bins):    #Define number of rows    numRows = h_bins*s_bins    sig1 = cv.CreateMat(numRows, 3, cv.CV_32FC1)    sig2 = cv.CreateMat(numRows, 3, cv.CV_32FC1)    for h in range(h_bins):        for s in range(s_bins):  bin_val = cv.QueryHistValue_2D(hist1, h, s) cv.Set2D(sig1, h*s_bins+s, 0, cv.Scalar(bin_val)) cv.Set2D(sig1, h*s_bins+s, 1, cv.Scalar(h)) cv.Set2D(sig1, h*s_bins+s, 2, cv.Scalar(s)) bin_val = cv.QueryHistValue_2D(hist2, h, s) cv.Set2D(sig2, h*s_bins+s, 0, cv.Scalar(bin_val)) cv.Set2D(sig2, h*s_bins+s, 1, cv.Scalar(h)) cv.Set2D(sig2, h*s_bins+s, 2, cv.Scalar(s))    #This is the important line were the OpenCV EM algorithm is called    return cv.CalcEMD2(sig1,sig2,cv.CV_DIST_L2)### MAIN ########################################################################if __name__=="__main__":    #Load image 1    src1 = cv.LoadImage("image1.jpg")    #Load image 1    src2 = cv.LoadImage("image2.jpg")    # Get histograms    histSrc1= calcHistogram(src1)    histSrc2= calcHistogram(src2)    # Compare histograms using earth mover's    histComp = calcEM(histSrc1,histSrc2,30,32)    #Print solution    print(histComp)

我使用Python 2.7和Python(x,y)测试了与之前的代码非常相似的代码。如果您想了解有关Earth
Mover的更多信息,并希望了解使用OpenCV和C ++的实现,则可以阅读Gary Bradski和Adrain
Kaebler的“学习OpenCV”一书的“第7章:直方图匹配”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号