使用OpenCV和Zbar在Python中检测二维码大小

0 投票
1 回答
5188 浏览
提问于 2025-04-18 00:33

我有一段代码,它可以从网络摄像头获取一张图片,使用zBar扫描这张图片中的二维码,并返回二维码的值以及一张高亮显示二维码的图片(这个是基于http://sourceforge.net/p/qrtracker/wiki/Home/的内容)。我想知道怎么才能让它告诉我二维码的大小(可以是像素值或者占屏幕的百分比)?

还有一个附加问题:有没有办法检测二维码的倾斜程度(比如围绕Y轴的旋转)?

1 个回答

3

关于代码的大小

zBar提供了一种方法,可以用像素值来处理这个问题(当你知道了像素值的大小后,就可以换算成百分比)。

我想在这里扩展一下代码:http://sourceforge.net/apps/mediawiki/zbar/index.php?title=HOWTO:_Scan_images_using_the_API

上面的代码可以在一张图片中找到二维码,并打印出它的数据等。现在来看一下代码的最后几行:

import math
scanner.scan(image)
[a,b,c,d] = x.location   # it returns the four corners of the QR code in an order
w = math.sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2)  # Just distance between two points
h = math.sqrt((b[0]-c[0])**2 + (b[1]-c[1])**2)
Area = w*h

二维码的倾斜度

我觉得你想把它变成一个预定义的形状(比如正方形、矩形等)。如果是这样的话,你可以定义一个预定义形状的四个角,比如说((100,100), (300,100),(300,300),(100,300))。然后找到透视变换,并在需要的时候应用这个变换。这里有一个OpenCV的例子:http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html#perspective-transformation

撰写回答