python在图片中找指定形状_如何在opencv / python中识别具有特定形状的直方图

这段博客介绍了如何在OpenCV和Python中通过直方图识别图像中的特定形状。作者提供了计算图像直方图的代码,并讨论了如何应用掩码来针对图像的特定部分进行直方图计算,以帮助识别图像中的形状。
摘要由CSDN通过智能技术生成

(如果我误解了这个问题,请参见最后的编辑):

如果你想绘制直方图,我已经向OpenCV提交了一个python样本,你可以从这里得到它:

第二个是灰度图像专用的,与问题中的图像相同.

我将展示第二个及其修改.

考虑如下完整图像:

我们需要绘制直方图,如图所示.检查以下代码:

import cv2

import numpy as np

img = cv2.imread('messi5.jpg')

mask = cv2.imread('mask.png',0)

ret,mask = cv2.threshold(mask,127,255,0)

def hist_lines(im,mask):

h = np.zeros((300,256,3))

if len(im.shape)!=2:

print "hist_lines applicable only for grayscale images"

#print "so converting image to grayscale for representation"

im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

hist_item = cv2.calcHist([im],[0],mask,[256],[0,255])

cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX)

hist=np.int32(np.around(hist_item))

for x,y in enumerate(hist):

cv2.line(h,(x,0),(x,y),(255,255,255))

y = np.flipud(h)

return y

histogram = hist_lines(img,None)

下面是我们得到的直方图.请记住,它是完整图像的直方图.为此,我们给了面具无.

现在我想找到图像某些部分的直方图. OpenCV直方图功能有一个掩码工具.对于普通直方图,您应将其设置为None.否则你必须指定掩码.

掩码是一个8位图像,其中白色表示该区域应该用于直方图计算,黑色表示它不应该用于直方图计算.

所以我使用了下面的面具(使用颜色创建,你必须为你的目的创建自己的面具).

我更改了最后一行代码,如下所示:

histogram = hist_lines(img,mask)

现在看看下面的区别:

(请记住,值是标准化的,因此显示的值不是实际像素数,标准化为255.根据需要更改它.)

编辑:

我想我误解了你的问题.你需要比较直方图,对吗?

如果这是你想要的,你可以使用cv2.compareHist函数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值