2013-03-27 3 views
0

QT에서 opencv2.3.1을 사용하여 원을 감지했습니다.openCV를 사용하여 QT에서 이미지 처리

내 오픈 CV 디렉토리는 D입니다 : \ OpenCV의

다음

내 코드 :

프로젝트 파일 :

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = ImgProcessing 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp 

HEADERS += mainwindow.h \ 

FORMS += mainwindow.ui 


INCLUDEPATH +=D:\\opencv\\build\\include 

LIBS += -LD:\\opencv\\build\\x86\\vc10\\lib \ 
    -lopencv_calib3d231d \ 
    -lopencv_contrib231d \ 
    -lopencv_core231d \ 
    -lopencv_features2d231d \ 
    -lopencv_flann231d \ 
    -lopencv_gpu231d \ 
    -lopencv_haartraining_engined \ 
    -lopencv_highgui231d \ 
    -lopencv_imgproc231d \ 
    -lopencv_legacy231d \ 
    -lopencv_ml231d \ 
    -lopencv_objdetect231d \ 
    -lopencv_ts231d \ 
    -lopencv_video231d 

및 메인 창에 내가 시도입니다 Click 이벤트에 QPushButton을 넣어

이미지 프로세싱을 할 것입니다.

void MainWindow::on_pushButton_clicked() 
{ 
    cv::Mat matOrg=cv::imread("D:\\temp\\Test_mar26-5-1.bmp"); 
    cv::Mat matProcessed; 

    std::vector<cv::Vec3f> vecCircles; 
    std::vector<cv::Vec3f>::iterator itrCircles; 

    cv::inRange(matOrg,cv::Scalar(0,0,175),cv::Scalar(100,100,256),matProcessed); 
    cv::GaussianBlur(matProcessed,matProcessed,cv::Size(9,9),1.5); 
    cv::HoughCircles(matProcessed,vecCircles,CV_HOUGH_GRADIENT,2,matProcessed.rows/4,100,50,10,400); 

    for(itrCircles =vecCircles.begin();itrCircles !=vecCircles.end();itrCircles++) 
    { 
     ui->plainTextEdit->appendPlainText(QString("X: ")+ QString::number((*itrCircles)[0])); 
     ui->plainTextEdit->appendPlainText(QString("Y: ")+ QString::number((*itrCircles)[1])); 
     ui->plainTextEdit->appendPlainText(QString("Radius: ")+ QString::number((*itrCircles)[2])); 
    } 
} 

어떤 문제도없는 프로젝트 빌딩. \ ImgProcessing 빌드 - Desktop_Qt_5_0_0_MSVC2010_32bit_SDK \ 디버그 \의 ImgProcessing.exe

프로그램 ... : 내가

D를 시작 오류

다음 내가 무엇입니까 프로그램을 실행하려고 할 때하지만 문제는 뜻밖에 끝났습니다.

D : \ ImgProcessing 빌드 - Desktop_Qt_5_0_0_MSVC2010_32bit_SDK \ 디버그 \의 ImgProcessing.exe 코드 -1073741515

가 실행되지 왜 내가 점점 아니에요로 종료? 전체 블록에 주석 처리를 시도하면 실행 중입니다 (이미지 처리 코드 없음). 내가 cv :: mat 변수를 활성화하면 그 시간 이후에 런타임 오류가 발생합니다.

문제를 해결할 수 있도록 도와주세요.

for(itrCircles =vecCircles.begin();itrCircles !=vecCircles.end();itrCircles++) 
{ 
    ui->plainTextEdit->appendPlainText(QString("X: ")+ QString::number((*itrCircles)[0])); 
    ui->plainTextEdit->appendPlainText(QString("Y: ")+ QString::number((*itrCircles)[1])); 
    ui->plainTextEdit->appendPlainText(QString("Radius: ")+ QString::number((*itrCircles)[2])); 
} 

이 vecCircles에 문제가있을 수 있습니다 : 내가 프로세스에 노력하고 이미지가 enter image description here

+0

디버거는 무엇을 말합니까? – cmannett85

+0

빌드를 클릭하면됩니다. 그것은 아무런 문제없이 건물입니다. 실행을 클릭하면 "프로그램이 예기치 않게 끝났습니다."라는 오류 메시지가 나타납니다. – Saravanan

+0

그리고 이들 중 어느 것도 디버거가 아닙니다. 딱정벌레가있는 재생 버튼을 누르면 Qt Creator가 디버거를 통해 앱을 실행하고 디버그 퍼스펙티브를 엽니 다. – cmannett85

답변

0

만 블록을 언급 이하입니다. 그러나 유효한 접근 방식으로 단계별로 디버그해야합니다.

+0

나는 모두에 주석을 달았고 cv :: mat matOrg 만 활성화했다. 나는 오류가 발생했습니다 – Saravanan

+0

D : \\ temp \\ Test_mar26-5-1.bmp 파일이 정말로 존재합니까? –

0

코드가 제대로 작동 했으므로 아무런 오류가 없었습니다. 그러나 vecCircles.size()은 여기에 0을 표시합니다. 디버그 모드에서 빌드하고 중단 점을 찾으십시오 (F10 키를 계속 누르고 계십시오).

0

추가 한 .lib 파일에 따라 OpenCV .dll 파일을 만들 수 있습니다. 예를 들어, opencv_world320.dll을 .exe 파일의 같은 디렉토리에 넣으십시오. 파일 .DLL

참고 opencv_world320.dll 릴리스 모드이지만, opencv_world320 D .DLL 디버그 모드에서, 예를 들면 디버그 모드와 해제 모드에서 다르다.

.dll 파일은 opencv/build/bin 디렉토리 아래에 있습니다.

관련 문제