QRCodeDetector::detectAndDecode() 함수는 기본적으로 입력 영상 img에서 QR 코드의 검출과 해석을 동시에 수행하고, 해석된 문자열을 반환합니다. 만약 QR 코드의 네 꼭지점 좌표 또는 정사각형 형태의 QR 코드 영상이 필요하다면 points와 straight_qrcode 인자를 전달합니다. 단순히 QR 코드에 포함된 문자열만 얻고 싶다면 points와 straight_qrcode 인자는 생략할 수 있습니다.
카메라 입력 영상에서 QR 코드를 검출하고 암호화된 문자열을 추출하여 출력하는 예제 코드를 코드 13-6에 나타냈습니다. 코드 13-6에 나타난 decode_qrcode() 함수는 컴퓨터에 연결된 카메라로부터 들어오는 매 프레임마다 QR 코드를 검출하고, 검출된 QR 코드 사각형 영역과 QR 코드에 포함된 문자열을 화면에 함께 표시합니다. decode_qrcode() 함수가 정의된 소스 코드 파일은 내려받은 예제 파일 중 ch13/QRCode 프로젝트에서 확인할 수 있습니다.
코드 13-6 QR 코드 검출 및 해석 예제 프로그램 [ch13/QRCode]
01 void decode_qrcode() 02 { 03 VideoCapture cap(0); 04 05 if (!cap.isOpened()) { 06 cerr << "Camera open failed!" << endl; 07 return; 08 } 09 10 QRCodeDetector detector; 11 12 Mat frame; 13 while (true) { 14 cap >> frame; 15 16 if (frame.empty()) { 17 cerr << "Frame load failed!" << endl; 18 break; 19 } 20 21 vector<Point> points; 22 String info = detector.detectAndDecode(frame, points); 23 24 if (!info.empty()) { 25 polylines(frame, points, true, Scalar(0, 0, 255), 2); 26 putText(frame, info, Point(10, 30), FONT_HERSHEY_DUPLEX, 1, Scalar(0, 0, 255)); 27 } 28 29 imshow("frame", frame); 30 if (waitKey(1) = = 27) 31 break; 32 } 33 }
• 3행 컴퓨터에 연결된 기본 카메라를 이용하여 VideoCapture 객체 cap을 생성합니다.
• 10행 QRCodeDetector 객체 detector 변수를 선언합니다.
• 21~22행 카메라 매 프레임마다 QR 코드 검출 및 해석을 수행합니다.
• 24~27행 만약 QR 코드를 검출하고 QR 코드 문자열이 제대로 info 변수에 저장되었다면 QR 코드에 빨간색 사각형을 그리고, 해석된 문자열을 화면 좌측 상단에 빨간색 글자로 출력합니다.
• 31~32행 ESC 키를 누르면 while 반복문을 빠져나오고 프로그램이 종료됩니다.