python+opencv实现二维码定位(一)

本文介绍了使用Python和OpenCV库实现二维码定位的基本思路和关键步骤,包括阈值二值化、寻找轮廓、计算面积和质心等操作。在遇到复杂背景时,建议通过阈值分割、膨胀腐蚀等预处理改进定位效果。
摘要由CSDN通过智能技术生成

参考:
思路和代码
二维码补充知识

基本思路是:
1)定位点的轮廓有三层轮廓
2)每个定位点的轮廓中心点一样的
3)三个定位点可以围成一个等腰直角三角形

补充思路:
当背景过于复杂的使用时候无法正确找到二维码位置,按以下思路尝试改进:
1)阈值分割
2)膨胀或者腐蚀
3)扣取所有正方形区域,逐一检测
4)然后再进行上面的操作

import numpy as np
import copy

def reshape_image(image):
    '''归一化图片尺寸:短边400,长边不超过800,短边400,长边超过800以长边800为主'''
    width,height=image.shape[1],image.shape[0]
    min_len=width
    scale=width*1.0/400
    new_width=400
    new_height=int(height/scale)
    if new_height>800:
        new_height=800
        scale=height*1.0/800
        new_width=int(width/scale)
    out=cv2.resize(image,(new_width,new_height))
    return out

def detecte(image):
    '''提取所有轮廓'''
    gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    _,gray=cv2.threshold(gray,0,255,cv2.THRESH_OTSU+cv2.THRESH_BINARY_INV)
    img,contours,hierachy=cv2.findContours(gray,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    return image,contours,hierachy
 
def compute_1(contours,i,j):
    '''最外面的轮廓和子轮廓的比例'''
    area1 = cv2.contourArea(contours[i])
    area2 = cv2.contourArea(contours[j])
    if area2==0:
        return False
    ratio = area1 * 1.0 / area2
    if abs(ratio - 49.0 / 25):
        return True
    return False
def
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值