Как превратить картинку в черно-белую в qt?

Пользователь

от ella , в категории: C/C++ , год назад

Как превратить картинку в черно-белую в qt?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dayna , год назад

@ella 

Существует несколько способов преобразовать картинку в черно-белую в Qt.

  1. Использование фильтра QGrayscaleFilter:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
QPixmap pixmap("original_image.jpg");

QGraphicsScene scene;
QGraphicsPixmapItem item(pixmap);

QGraphicsPixmapItem *bw_item = scene.addPixmap(pixmap);
QGraphicsBlurEffect *filter = new QGraphicsBlurEffect();
filter->setBlurRadius(0);
filter->setEnabled(true);
bw_item->setGraphicsEffect(filter);


  1. Использование класса QImage:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
QPixmap pixmap("original_image.jpg");

QImage image = pixmap.toImage();

for(int y=0; y<image.height(); y++)
{
    for(int x=0; x<image.width(); x++)
    {
        QRgb pixel = image.pixel(x,y);
        int gray = qGray(pixel);
        image.setPixel(x,y,qRgb(gray,gray,gray));
    }
}

QPixmap blackWhitePixmap = QPixmap::fromImage(image);


  1. Использование своего алгоритма преобразования:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
QPixmap pixmap("original_image.jpg");

QImage image = pixmap.toImage();

for(int y=0; y<image.height(); y++)
{
    for(int x=0; x<image.width(); x++)
    {
        QRgb pixel = image.pixel(x,y);
        int gray = ((qRed(pixel)*0.3) + (qGreen(pixel)*0.59) + (qBlue(pixel)*0.11));
        image.setPixel(x,y,qRgb(gray,gray,gray));
    }
}

QPixmap blackWhitePixmap = QPixmap::fromImage(image);


Все три подхода дают результат в виде черно-белой картинки.

Пользователь

от cierra , месяц назад

@ella 

Вот пример кода, который преобразует изображение в черно-белое с использованием класса QImage:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// Загрузка исходного изображения
QImage originalImage("original_image.jpg");

// Создание нового QImage для черно-белого изображения
QImage blackWhiteImage(originalImage.size(), QImage::Format_RGB32);

// Проход по каждому пикселю и преобразование его в черно-белый
for(int y = 0; y < originalImage.height(); y++) {
    for(int x = 0; x < originalImage.width(); x++) {
        QRgb pixel = originalImage.pixel(x, y);
        int gray = qGray(pixel);
        blackWhiteImage.setPixel(x, y, qRgb(gray, gray, gray));
    }
}

// Сохранение черно-белого изображения
blackWhiteImage.save("black_white_image.jpg");


Этот код загружает исходное изображение, создает новое черно-белое изображение того же размера, затем преобразует каждый пиксель в черно-белый и сохраняет результат в файл "black_white_image.jpg".