Как сохранить несколько изображений с разными именами, используя функцию OpenCV cvSaveImage ()? - PullRequest
1 голос
/ 02 апреля 2011

Hy. То, что я пытаюсь сделать, это загрузить кучу изображений, изменить их размер и сохранить изображение с измененным размером в другую папку. Он загружает изображения, я проверил, и работает нормально, единственная проблема, с которой я столкнулся, это cvSaveImage .например:

char num[350]="C:\\Users\\Alex\Desktop\\pozeTiles\\image";  
char str[10];      
char pmp[10]=".bmp";    
itoa(index, str, 10);                     
strcat(num,str);   
strcat(num,pmp);     

cvNamedWindow("Testimage", HG_AUTOSIZE);    
cvShowImage("Testimage", img);    
IplImage *imgA = resizeImage(img,20,20, true);    
cvSaveImage(num, imgA);    
cvWaitKey(0);    
cvReleaseImage(&img);    
cvDestroyWindow("Testimage");    
index++;

Это внутри цикла, и оно не работает (на данный момент это только 1 фотография). Если я изменяю атрибут cvSaveImage на:

 cvSaveImage("d:\\d.bmp", imgA);

, это работает.Проблема в том, что у меня есть несколько файлов, и я не могу изменить имя для каждого .. так может кто-то, пожалуйста, помогите мне? Какой параметр я должен использовать, чтобы он работал?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2011

Прямо перед cvSaveImage() добавить оператор отладки, например printf("Saving: %s\n", num);.

Кроме того, вы не проверяете возврат cvSaveImage().Это ужасно, потому что функция может давать сбой по ряду причин:

if (!cvSaveImage(num, imgA))
{
    printf("!!! cvSaveImage failed for %s\n", num);
    // break or exit()
}

Скорее всего, вы собираете неправильный путь к каталогу.Отладка, которую я предложил вам добавить, скажет вам об этом.Давайте шаг за шагом сделаем ваш код:

char num[350]="C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpg";  
char str[10];      
char pmp[10]=".bmp";    
itoa(index, str, 10);

strcat(num,str);   
// if num was "C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpg"
// right now it should be: "C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpgX"
// where X is the index number.

strcat(num,pmp);
// at this point, num will be:
// "C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpgX.bmp"
2 голосов
/ 09 апреля 2011

int main (int argc, char * argv []) {

int c=1;
IplImage* img=0;
char buffer[1000];
CvCapture* cv_cap=cvCaptureFromCAM(-1);
cvNamedWindow("Video",CV_WINDOW_AUTOSIZE);

while (1) {

  img=cvQueryFrame(cv_cap);
  cvShowImage("Video",img);
  sprintf(buffer,"D:/image%u.jpg",c);
  cvSaveImage(buffer,img);
  c++;
      if (cvWaitKey(100)== 27) break;

}

cvDestroyWindow("Video");
return 0;

}

1 голос
/ 02 апреля 2011

Похоже, вы неправильно создали выходное имя файла, попробуйте вывести значение num внутри цикла.

Или вы можете создать выходной файл 1.bmp, 2.bmp и т. Д. С чем-то вроде

char filename[80];

..... loop ...

sprintf(filename,"%u.bmp",counter)
cvSaveImage(filename, imgA);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...