본문 바로가기

IT

OpenCV 디버깅 방법과 흔한 오류 해결법

OpenCV는 이미지나 영상 데이터를 다루기 때문에, 

디버깅할 때는 시각적으로 확인하는 습관이 정말 중요해요.

 

OpenCV 디버깅 방법과 흔한 오류 해결


프로그램이 뻗거나 예기치 못한 결과가 나올 때, 

원인을 빠르게 찾고 해결하는 팁들을 정리했어요.

디버깅의 시작: 이미지가 제대로 불러와졌는지 확인하기

가장 흔한 실수는 cv::imread()로 이미지를 불러올 때 경로나 파일이 잘못된 경우예요.
이때는 cv::Mat.empty()로 이미지가 제대로 로드됐는지 꼭 확인해봐야 해요.
파일 경로는 상대경로보다 절대경로를 사용하면 오류를 줄일 수 있어요.

 

cv::Mat img = cv::imread("sample.jpg");
if (img.empty()) {
    std::cerr << "이미지를 불러오지 못했습니다. 경로를 확인하세요." << std::endl;
    return -1;
}

이렇게 이미지 로딩에 실패했을 때 바로 알려주는 코드가 디버깅의 첫걸음이에요.

Mat 크기나 채널 오류 확인하기

OpenCV에서 이미지 연산 시,

크기(rows, cols) 또는 채널(channels()) 수가 다르면 에러가 자주 발생해요.
예를 들어 두 이미지를 add()나 bitwise_and()로 처리하려 할 때,

크기나 타입이 다르면 예외가 발생해요.


또한 컬러 이미지를 흑백으로 처리하는 연산에 컬러 이미지가 들어가면

결과가 이상하게 나올 수 있어요.
이럴 땐 .size(), .type(), .channels() 등을 사용해 사전에 확인해두는 습관이 좋아요.

 

if (img1.size() != img2.size() || img1.type() != img2.type()) {
    std::cerr << "두 이미지의 크기나 타입이 달라서 연산할 수 없어요." << std::endl;
}

이렇게 조건문으로 비교해서 문제를 미리 차단하는 것도 좋은 디버깅 전략이에요.

영상 처리 중 오류: 잘못된 ROI, 잘린 영역

영상 처리 중 Rect로 영역을 잘라낼 때,

잘못된 좌표를 지정하면 프로그램이 뻗을 수 있어요.
예를 들어 이미지 크기를 넘는 Rect를 지정하면

cv::Mat::operator()에서 예외가 발생해요.


이걸 방지하려면 반드시 Rect 범위가 Mat의 범위 안에 있는지 체크해줘야 해요.

cv::Rect roi(50, 50, 200, 200);
if (roi.x + roi.width <= img.cols && roi.y + roi.height <= img.rows) {
    cv::Mat cropped = img(roi);
} else {
    std::cerr << "ROI 영역이 이미지 범위를 벗어났어요." << std::endl;
}

ROI 관련 버그는 흔하지만 사전 체크만 잘하면 쉽게 막을 수 있어요.

디버그 모드에서 DLL 관련 오류 해결하기

Windows에서 OpenCV를 디버그 모드로 실행할 경우,

디버그용 DLL(opencv_worldXXXd.dll)이 필요해요.


프로젝트가 디버그 모드인데 릴리즈용 DLL을 연결하거나 반대로 설정하면

DLL not found, entry point 오류가 발생해요.
이럴 땐 프로젝트 설정에서 링커 옵션과 디버그/릴리즈 라이브러리 링크를 제대로 맞춰줘야 해요.


추가로, DLL 파일이 실행 파일과 같은 폴더에 없으면 실행 중 오류가 날 수 있으니

PATH 환경변수 설정도 필수예요.

 

링커 > 입력 > opencv_world455d.lib (디버그)
링커 > 입력 > opencv_world455.lib  (릴리즈)

특히 Visual Studio 사용자라면 이 부분을 꼭 신경써야 해요.

디버깅을 쉽게 해주는 OpenCV 시각화 팁

코드로 결과를 추적하는 것보다,

imshow()로 직접 이미지를 보는 게 디버깅에 훨씬 효과적일 때가 많아요.


중간 처리 결과나 마스크, 필터링된 이미지를

단계별로 화면에 띄워보면 어디서 잘못됐는지 빠르게 파악할 수 있어요.
그리고 cv::waitKey()를 적절히 넣어서 화면을 천천히 넘기면서 확인하면 좋아요.

 

cv::imshow("필터링 전", input);
cv::imshow("필터링 후", output);
cv::waitKey(0); // 0이면 키 입력까지 대기

간단하지만 강력한 시각화 디버깅 기법이에요.

 

이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~

OpenCV 디버깅 방법과 흔한 오류 해결법.mp3
3.98MB