2017-11-03 2 views
0

이력서 :: 매트에서 변환 된 이미지 세그먼트 폴트를 제공하며 다음과 같이이다 : 프로그램이 그냥 많은 이미지를 시도했습니다 .. 어떤 디버그 로그없이 추락 그러나QPixmap fromImage 내가 코드를 단순화

Mat mat = imread("xxx.jpg"); //Successfully read the image, confirmed by cvShowImage. 

if (mat.empty()) 
{ 
    qDebug() << "Couldn't load image"; 
    return; 
} 

Mat cpy = mat.clone(); 
cvtColor(mat,cpy,CV_BGR2RGB); 
QImage image(cpy.data, cpy.cols, cpy.rows, cpy.step, QImage::Format_RGB888); 

try { 
    pm = QPixmap::fromImage(image); //crash line 
} catch(std::exception const &ex){ 
    qDebug()<<ex.what(); 
} 

결과는 동일합니다. 나는 "스택 추적"을 찾기 위해 시도하고 이것에 세그먼트 폴트를 줄 것 같다 ..

enter image description here

+2

먼저 QImage image (...);를 실행 한 다음,'pm = QPixmap :: fromImage (fim);'을 수행하십시오. '핌'이란 무엇입니까? (충돌의 이유?) 나는 이것을 [MCVE] (http://stackoverflow.com/help/mcve)로 만들기를 강력히 제안한다. 이것이 당신의 문제를 해결하지 못한다면, 적어도이 공동체에서 더 많은 관심을 끌어내는 데 도움이 될 것입니다. – Scheff

+0

나는 fim이 일부 unitialized 데이터를 보유하고 있다고 가정합니다. –

+0

@Scheff 아 미안합니다. 다른 기능에서 코드를 복사했기 때문에 "이미지"여야하지만 "핌"이 아닙니다. – Vitech

답변

0

괜찮이 .. 단지

QImage image(cpy.data, cpy.cols, cpy.rows, cpy.step, QImage::Format_RGB888); 
image = image.rgbSwapped(); 

그것을 해결에 전환 코드를 변경합니다. 사실이게 왜 고쳐 졌는지 나는 모른다. 왜냐하면 CV_BGR2RGB가 아닌 COLOR_BGR2RGB를 사용해야하기 때문일 수 있습니다.