Ошибка подтверждения (src.type () == dst.type ()) в opencv - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть изображение PNG pic.png, и я делаю его прозрачным, используя следующую функцию createMask()

    origpic = cvLoadImage("/root/opencv/newtutorial/newcode_try2/pic.png",1);
    pic = createMask(origpic);

У меня есть функция createMask

    IplImage* createMask(IplImage* image) {
        IplImage *mask;
        mask = cvCreateImage(cvGetSize(image), 8, 1);
        cvInRangeS(image, cvScalar(255.0, 255.0, 255.0), cvScalar(255.0, 255.0, 255.0), mask);
        cvNot(mask, mask);
        return mask;
    }

Теперь моя проблемаэто когда я деформирую его с

cvWarpPerspective( pic, neg_img, warp_matrix);

Я получаю эту ошибку

OpenCV Error: Assertion failed (src.type() == dst.type()) in cvWarpPerspective, 
file /root/OpenCV-2.3.1/modules/imgproc/src/imgwarp.cpp, line 3234
terminate called after throwing an instance of 'cv::Exception'
what():  /root/OpenCV-2.3.1/modules/imgproc/src/imgwarp.cpp:3234:
error: (-215) src.type() == dst.type() in function cvWarpPerspective

1 Ответ

1 голос
/ 01 ноября 2011

Вы должны создать изображение назначения того же типа, что и рис. А функция createMask () создает изображение в градациях серого.

поэтому перед вызовом warpPerspective добавьте следующую строку:

neg_img = cvCreateImage(cvGetSize(pic),8,1);

Обратите внимание, что вы можете использовать другой размер для целевого изображения, и результат будет обрезан или, в зависимости от warp_matrix, заполнен черным пространством вокруг:

neg_img = cvCreateImage(CvSize(200,300),8,1);

А также, лучшей идеей будет использование интерфейса c ++ с Mat вместо IplImage. Он автоматически заботится об управлении памятью, он чище и проще в использовании. Единственная ситуация, когда вам действительно нужно использовать интерфейс c, - это некоторые встроенные системы, где компилятором является только C.

...