Ошибка OpenCV: утверждение не удалось в cvAdaptiveThreshold

Недавно я начал программировать OpenCV на OSX (просто с помощью текстового редактора и компиляции в терминале). Я нашел программу в Интернете, которая очень полезна для меня, но, похоже, не может ее запустить.
Это код:

#include <stdio.h>
#include "cv.h"#include <highgui.h>
#include <iostream>
#include <cstdio>
using namespace std;
int widthU;
int heightU;
int xU = 0;
int yU = 0;
int main(int argc, char *argv[])
{
IplImage *imgPicThres, *imgPicInput;
imgPicInput = cvLoadImage("bitmap.png", -1);
imgPicThres = cvCreateImage(cvSize(imgPicInput->width, imgPicInput->height), IPL_DEPTH_8U, 1);
cvNamedWindow("Input picture", 0);
cvNamedWindow("Thres picture", 0);
//Picture
//cvThreshold(imgPicInput,imgPicThres,100,255,CV_THRESH_BINARY);
cvAdaptiveThreshold(imgPicInput, imgPicThres,255,CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY,75,10);
cvShowImage("Input picture", imgPicInput);
cvShowImage("Thres picture", imgPicThres);
while (true)
{
int c = cvWaitKey(10);
if(c==27)
break;
}
cvDestroyWindow("Input picture");
cvDestroyWindow("Thres picture");
return 0;
}

И это ошибка, которую я получаю:

OpenCV Error: Assertion failed (src.size == dst.size && src.type() == dst.type()) in cvAdaptiveThreshold, file /opt/local/var/macports/build/_opt_mports_dports_graphics_opencv/opencv/work/opencv-2.4.5/modules/imgproc/src/thresh.cpp, line 873
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6

Я пытался изменить эту строку

ImgPicThres = cvCreateImage(cvSize(imgPicInput->width, imgPicInput->height), IPL_DEPTH_8U, 1);

в

ImgPicThres = cvCreateImage(cvGetSize(imgPicInput), IPL_DEPTH_8U, 1);

без удачи
OpenCV устанавливается через Macports и работает под управлением последней версии. Любая помощь будет оценена. Спасибо!

0

Решение

imgPicInput = cvLoadImage("bitmap.png",CV_LOAD_IMAGE_GRAYSCALE);

чтобы убедиться, что изображение, которое вы читаете, на самом деле является оттенками серого.

1

Другие решения

В дополнение к предложению от perfanoff, я бы скорее клонировал образ, чем создавал его.

imgPicThres = cvCloneImage(imgPicInput );
0

Я нашел ответ, но забыл упомянуть его. Как говорит ошибка, imgPicInput и imgPicThres не имеют одинаковый размер и тип. Также я должен был смотреть каналы изображения, которые я не сделал.

0
По вопросам рекламы [email protected]