더북(TheBook)

QRCodeDetector::detectAndDecode() 함수는 기본적으로 입력 영상 img에서 QR 코드의 검출과 해석을 동시에 수행하고, 해석된 문자열을 반환합니다. 만약 QR 코드의 네 꼭지점 좌표 또는 정사각형 형태의 QR 코드 영상이 필요하다면 pointsstraight_qrcode 인자를 전달합니다. 단순히 QR 코드에 포함된 문자열만 얻고 싶다면 pointsstraight_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 반복문을 빠져나오고 프로그램이 종료됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.