简体   繁体   English

使用 Open CV 迭代器 segfault

[英]Using Open CV Iterators segfault

I want to do something like eigenfaces but with different images (not faces).我想做一些像特征脸但有不同图像(不是脸)的东西。 I have a vector of images, images .我有一个图像向量images From these images, I want to make a Mat object, data which contains in each row, a image written out as a row vector.从这些图像中,我想制作一个Mat object,每行中包含的data ,一个写成行向量的图像。 This is what I tried to do:这就是我试图做的:

// This is basically a matrix that needs to have a bunch of images as rows.
Mat data(numImages, IMAGE_SIZE * IMAGE_SIZE, CV_8UC1);
// I also replaced CV_8U by images[0].type() and CV_8U. no change
MatIterator_<unsigned short> iter = data.begin<unsigned short> (),
                             iter_end = data.end<unsigned short> (), 
                             iter2;

for (i = 0; i < numImages; ++i)
{
    MatIterator_<unsigned short> begin = images[i].begin<unsigned short> ();
    MatIterator_<unsigned short> end = images[i].end<unsigned short> ();
    for (iter2 = begin; iter2 != end; iter2++)
    {
        *iter = *iter2; // Segfault is here.
        if (iter != iter_end) // safety check
            iter++;
        else
            perror("Screwed!\n"); // This does not execute!
    }
}

Help!帮助!

Thanks!谢谢!

I think that in your matrix each field has 1 byte (CV_8UC1), but you iterator is "unsigned short" iterator.我认为在您的矩阵中,每个字段都有 1 个字节(CV_8UC1),但您的迭代器是“无符号短”迭代器。 Unsigned short usually has 2 bytes. Unsigned short通常有 2 个字节。 change it to将其更改为

data.begin<unsigned char> ()

also check stdint.h: http://en.wikipedia.org/wiki/Stdint.h还要检查stdint.h: http://en.wikipedia.org/wiki/Stdint.h

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM