2015-09-30 2 views
0

Каждый раз, когда я запускаю этот код, программа не отвечает, а затем я получаю этот msg, и я не знаю, в чем проблема? так может кто-нибудь мне помочь?Ошибка при использовании IDCT (OpenCV)

Сообщение: enter image description here

Мой код:

int main(){ 
Mat image,DctImage; 
image=imread("2.jpg"); 
cvtColor(image,image,CV_BGR2GRAY); 
image.convertTo(image,CV_32FC1); 
Mat freq; 
dct(image,freq); 

imwrite("DctImage.jpg",freq); 

int Start;int col=0;int rows=0; 
stringstream ss; 

for(Start=100;Start>0;Start=Start-1){ 
    for(int x=Start;x<freq.rows;x++){ 
     for(int y=Start;y<freq.cols;y++){ 
      freq.at<double>(x,y)=0.0; 
     } 
    } 
Mat dst(freq.size(),freq.type()); 
idct(freq,dst); 
ss<<Start<<".jpg"; 
cout<<ss.str()<<endl; 
imwrite(ss.str(),dst); 
ss.str(""); 
cout<<ss.str()<<endl; 

} 
+0

Вы уверены, что изображение находится в той же папке, что и ваш исполняемый файл? Программа отлично работает для меня. Он сделал 100 файлов изображений с исходного изображения, на котором я его тестировал. – Jason

+0

Да, это прекрасно читает, проблема в функции idct, когда я комментирую, что она работает нормально, поэтому я не знаю, что именно неправильно с этим! –

+0

'0xC0000005' - нарушение прав доступа. Скомпилируйте и запустите с помощью отладчика, чтобы найти местоположение ошибки. –

ответ

1

Попробуйте изменить freq.at<double>(x,y)=0.0; к freq.at<float>(x,y)=0.0;, потому что вы кормите image.convertTo (изображение, CV_32FC1); и должен ожидать тот же тип элемента.

+1

Я не знаю, почему вы сказали это, но я попытался, и это дало мне ту же ошибку. так что вы видите? –

+0

Да, вы правы, мне плохо, извините. Попробуйте изменить freq.at (x, y) = 0.0; до freq.at (x, y) = 0,0; потому что вы кормите image.convertTo (изображение, CV_32FC1); и должен ожидать тот же тип элемента. –

+1

@AndreySmorodov Не могли бы вы поместить свой комментарий и в ответ. В противном случае ваш ответ не очень полезен для будущих читателей ... Спасибо. –

Смежные вопросы