Я работаю с OpenCV 2.4.11 в C на Code :: Blocks, в частности через книгу O'Reilly Learning OpenCV. Раздел по алгоритму водораздела был немного коротким, поэтому я подумал, что немного поиграю с ним, чтобы узнать, как именно он работает. Тем не менее, каждый раз, когда я вызываю функцию, я получаю следующее сообщение об ошибке:cvWatershed неподдерживаемый формат или комбинация форматов
OpenCV Error: Unsupported format or combination of formats (Only 32-bit, 1-chann el output images are supported) in cvWatershed
Моя программа до сих пор очень просто:
int main(int arg, int arg2) {
//open windows
cvNamedWindow("Input", 1);
cvNamedWindow("Markings", 1);
//load images
IplImage* input = cvLoadImage("ActualDoorPhoto.jpg", CV_LOAD_IMAGE_COLOR);
assert(input != NULL);
IplImage* markingstemp = cvLoadImage("ActualMarkingTest.jpg", CV_LOAD_IMAGE_COLOR);
assert(markingstemp != NULL);
//prepare markings
IplImage* markings = cvCreateImage(cvGetSize(markingstemp), 32, 1);
CvMat* markmat = cvCreateMat(input->width, input->height, CV_32FC1);
cvWatershed(input, markmat);
cvShowImage("Input", input);
cvShowImage("Markings", markings);
cvWaitKey(0);
return 0;
}
Я пытался поставить обе маркировки и markmat в качестве второго аргумента для cvWatershed , а также несколько других вещей (особенно маркировка с контурами markingstemp, нарисованных на нем), но каждый раз, когда я получаю ту же ошибку. Может ли кто-нибудь сказать мне, что я делаю неправильно?
Хорошо, я пробовал это, и ошибка изменилась на «Ошибка OpenCV: размеры входных аргументов не совпадают» (входные и выходные изображения должны иметь одинаковый размер) в cvWatershed « Это кажется странным с самого своего размера берется из другого. Есть идеи по этому поводу? – Logician
Вы инвертируете размеры: 'CvMat * markmat = cvCreateMat (input-> height, input-> width, CV_32FC1);' Вероятно, формат также должен быть CV_32SC1'. – Miki
О, черт, да, это сработало. Благодаря! Кажется, это глупый вопрос. – Logician