2015-01-29 3 views
0

체스 판에서 무인 항공기의 위치를 ​​알기 위해 AR Drone의 하단 카메라를 사용하여 QR 코드를 감지합니다. 무인 항공기는 체스 판 위에 놓여 있는데, 각 정사각형은 위치를 지닌 QR 코드 (예 : A1, C5, E7 등)입니다. 특정 키를 누르면 QR 코드를 스캔하여 위치로 되돌립니다.OpenCV, Python 및 zbar를 사용하여 단일 QR 코드를 검색하는 방법

지금 당장은 많은 QR 코드 하나를 감지하고 싶습니다. 무인 항공기는 여러 개의 QR 코드를 가지고있을 가능성이 있기 때문에 가능합니다. 무인 항공기가 어느 정사각형에 있는지, 또는 적어도 가장 가까운 정사각형을 알아야하기 때문에 (예 : A1보다 2/3, A2보다 1/3은 A1이어야 함). 현재 사용중인 코드는 다음과 같습니다.

#!/usr/bin/python 
from sys import argv 
import zbar 
import Image 
import cv2 

class DetectQRCode(object): 

    @classmethod 
    def detect_qr(self, image): 
     # create a reader 
     scanner = zbar.ImageScanner() 

     # configure the reader 
     scanner.parse_config('enable') 

     # obtain image data 
     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY,dstCn=0) 
     pil = Image.fromarray(gray) 
     width, height = pil.size 
     raw = pil.tostring() 


     # wrap image data 
     image = zbar.Image(width, height, 'Y800', raw) 

     # scan the image for barcodes 
     scanner.scan(image) 

     # extract results 
     for symbol in image: 
      # do something useful with results 
      if symbol.data == "None": 
       return "Drone bevindt zich buiten het raster" 
      else: 
       return symbol.data 

OpenCV, Python을 사용하여이 작업을 수행 할 수 있습니까? zbar에 사용할 수있는 것이 있습니까?

답변

2

QR 코드 (가장 큰 사각형) 주위의 모든 경계를 먼저 감지하는 것이 가장 좋습니다. 이미지의 QR 코드 목록을 제공합니다.

그런 다음이 목록을 통해 무인기 위치 &에 가장 가까운 것에 대한 목록을 정렬 한 다음 해당 QR 코드에서 QR 코드 판독기를 실행하십시오.

Here은 opencv를 사용하여 사각형을 감지하는 방법에 대한 자습서입니다.

& here은 내부에 추가 스퀘어가있는 경계 상자를 감지하는 방법을 보여주는 스택 오버플로 질문입니다. 이 같은 형식으로 좌표를 줄 것이다

0

경우 인쇄 symbol.location을 넣어

for symbol in image: 

((334, 407), (497, 424), (512, 272) (340, 251)) 카메라 이미지의 QR 코드의 네 모서리를 제공

그런 중심이

같은과 협조 얻을 수 있습니다 617,451,515,
loc = symbol.location 
x = (loc[0][0]+loc[2][0])/2 
y = (loc[0][1]+loc[2][1])/2 

과 중심이 중심

에 최단 거리로 QR을 사용하여 다음

distance_from_centre_squared = (x-500)**2 + (y-500)**2 

으로 500,500 말을하고있는 경우 카메라 이미지의 중심으로부터의 거리