проблема при написании cvGetImage с использованием cvMat - PullRequest
1 голос
/ 05 марта 2011

Я столкнулся с проблемой при записи изображения из cvMat.

Это то, что я сделал.

IplImage* low_threshold_mask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
CvMat* labelMat = cvCreateMat(low_threshold_mask->height,low_threshold_mask->width,CV_32F);

/ * Я заполняю элементы labelMat внутри функции.Это делается так: cvmSet (labelMat, r, c, label);// где метка имеет тип long * /

Для проверки значений я сбрасываю каждое значение пикселя в текстовый файл и также выводю изображение.

IplImage* labelImg;
IplImage imageHeader;
labelImg = cvGetImage(labelMat, &imageHeader);

Теперь, когда я сверяю интенсивность пикселей с соответствующим значением в записанном текстовом файле, я нахожу несоответствие.Я чувствую, что у меня есть правильные значения в текстовом файле, но неправильные в изображении.

Может кто-нибудь помочь разобраться в ошибке?


--------------------- Новое дополнение -------------------

Я все еще сталкиваюсь с проблемой.Я загрузил программ .Я объясню, где именно я сталкиваюсь с ошибкой.

Используемые библиотеки : Наряду с openCV я использую disjoint_sets библиотеки boost.

В основном я делаю маркировка подключенного компонента .В целях отладки для 20-го кадра я выгрузил информацию метки каждого пикселя как в а) текстовом файле, так и в) изображении с уровнями интенсивности, такими же, как и конечная метка пикселей.Поэтому я ожидаю, что значения одинаковы как в тексте, так и в изображении.Но этого не происходит.И я не могу понять, почему.Текстовые файлы показывают правильные значения, но не изображение.Я проверяю значения пикселей изображения в Matlab (я позаботился о индексах в matlab, начинающихся с 1, а не 0).

Мои текстовые файлы a) (frame20final.txt) заполняется в GrimsonGMM.cpp / ConCompLabeling ().b) (frame20image.txt) заполняется в main.cpp Мое выгруженное изображение (frame-ccs.jpg) заполняется в main.cpp.

Оба текстовых файла получают одинаковые значения. Таким образом, при записи изображения из CvMat должна быть какая-то ошибка.

Тестовое видео: person15_walking_d1_uncomp.avi Вы также можете попробовать любое другое видео.

Заранее спасибо, Каушик

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Я понял, почему я получаю ошибку.Я выгружал .jpg изображение, которое выполняло сжатие.Это было решено, когда я использовал .png

0 голосов
/ 05 марта 2011

Ваш вопрос так просто.

Вы хотите работать с CvMat, а после выполнения операций с CvMat вы хотите построить свой CvMat, как будто это изображение.

Вы должны создать imageHeader, что-то вроде этого.

CvMat* mat = cvCreateMatHeader(rows, cols, type);
mat->step = 4 * (mat->cols * CV_ELEM_SIZE1(mat->type) * CV_MAT_CN(mat->type) / 4 + 1);//critical
cvCreateData(mat);

В интерфейсе OpenCV 2.0 и ниже C ++ нет необходимости переходить с Mat на IplImage.

Вы можете построить изображение, используя cvShowImage, и если вы хотите преобразовать в IplImage просто выполните простое приведение IplImage * img = labelMat;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...