Форум программистов, компьютерный форум, киберфорум
C++: OpenCV
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
1

Opencv черно-белое изображение

06.04.2014, 20:40. Показов 5926. Ответов 3
Метки нет (Все метки)

Считываю изображение - перевожу его в черное-белое, вывожу в label, а оно странно отображается, если не переводить в черно-белое, то отображается нормально, даже когда применяю всякие фильтры от opencv.

Делал разными способами, результат всегда один (или похож). Скрин прикрепил. Должна быть одна кошка, вместо этого 3 уменьшенных в 9 раз изображений кошки и шумы снизу.

Делал так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
IplImage *image = cvLoadImage(FileOpName.toAscii().data());
 
            IplImage *gray_image = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
            cvCvtColor(image, gray_image, CV_RGB2GRAY);
 
           
            QImage *q_image = new QImage((uchar*)gray_image->imageData,
                                         gray_image->width,
                                         gray_image->height,
                                         QImage::Format_RGB888
                                         );
            ui->label->setPixmap(QPixmap::fromImage(q_image->rgbSwapped()));
и так
C++ (Qt)
1
2
3
4
5
6
7
8
9
IplImage *image = cvLoadImage(FileOpName.toAscii().data(), 0); //  (0 означает без цвета, т.е. черное-белое)
 
              
               QImage *q_image = new QImage((uchar*)gray_image->imageData,
                                         gray_image->width,
                                         gray_image->height,
                                         QImage::Format_RGB888
                                         );
            ui->label->setPixmap(QPixmap::fromImage(q_image->rgbSwapped()));
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Opencv черно-белое изображение  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2014, 20:40
Ответы с готовыми решениями:

Восстановить изображение OpenCV
Есть изображение с разорванной линией! Как можно восстановить его в Builder 6,используя фильтр...

Загрузить изображение по адресу в opencv
В opencv есть функция , которая считывает файл из папки с экзешником (по названию файла) -->...

OpenCV Изображение с веб камеры
Добрый день, товарищи. Потребовалось мне получить изображение с веб камеры, для своей программки...

Изображение части картинки в OpenCV
Здравствуйте! хочу ознакомиться с OpenCV, решил сделать функцию, которая бы в отдельном окне...

3
595 / 395 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
06.04.2014, 20:58 2
Помнится, когда использовал opencv для обработки изображения, то были подобные глюки.
Там большие проблемы с переводом IplImage в QImage. Каких только не перепробовал вариантов, все равно очень плохо получалось. В итоге сделал костыль - после обработки изображения с помощью opencv сохранял результат во временный файл, а потом загружал его в QImage. Наверняка - это плохое решение, но я не смог придумать ничего лучше.
1
1397 / 1254 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
06.04.2014, 21:30 3
Лучший ответ Сообщение было отмечено gore-lykovoe как решение

Решение

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
QImage Mat2QImage(const cv::Mat3b &mat)
{
    // 8-bits unsigned, NO. OF CHANNELS=1
    if(mat.type()==CV_8UC1)
    {
        // Set the color table (used to translate colour indexes to qRgb values)
        QVector<QRgb> colorTable;
        for (int i = 0; i < 256; ++i)
            colorTable.push_back(qRgb(i,i,i));
        // Copy input Mat
        const uchar *qImageBuffer = (const uchar*)mat.data;
        // Create QImage with same dimensions as input Mat
        QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8);
        img.setColorTable(colorTable);
        return img;
    }
    // 8-bits unsigned, NO. OF CHANNELS=3
    else if(mat.type() == CV_8UC3)
    {
        // Copy input Mat
        const uchar *qImageBuffer = (const uchar*)mat.data;
        // Create QImage with same dimensions as input Mat
        QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
        return img.rgbSwapped();
    }
    else
    {
        return QImage();
    }
}
1
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
06.04.2014, 21:57  [ТС] 4
alexey_rage, это решение рабочее, просто формат нужно было другой указать "Format_Indexed8". Всем спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2014, 21:57

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

Черно-белое изображение
Здравствуйте, возникла проблема создание сегментированного изображения.... Нашёл код для...

Цветное изображение -> черно-белое
как правильно сформировать матрицу яркости изображения и записать его в файл? что бы получить чб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.