цвета — цветные пиксели

Я новичок в C ++ и пытаюсь создать RGB-изображение размером 500×500 пикселей. Изображение должно быть заполнено линейной интерполяцией четырех цветов, каждый из которых определен для одного из углов, поэтому у меня должно быть что-то вроде:

Vec3b ul( 255, 0, 0 ); //upper left corner
Vec3b ur( 0, 255, 0 ); //upper right corner
Vec3b bl( 0, 0, 255 ); //bottom left corner
Vec3b br( 255, 0, 255 ); //bottom right corner

Конечный результат должен выглядеть так:

введите описание изображения здесь

Затем программа отображает изображение в окне и т. Д. И т. Д. Я могу сделать это, но мне просто нужно выяснить, как поместить цвета в изображение. Мой код пока таков:

#include <QtCore/QCoreApplication>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
#include <string>
#include <sys/stat.h>

using namespace cv;
int main()
{

Mat image;
image.create( 500, 500, CV_8UC3);
//upper left corner
Vec3b ul( 255, 0, 0 );
//upper right corner
Vec3b ur( 0, 255, 0 );
//bottom left corner
Vec3b bl( 0, 0, 255 );
//bottom right corner
Vec3b br( 255, 0, 255 );

namedWindow("Colored Pixels");
imshow("Colored Pixels", image);
// shows image for 5 seconds
waitKey(5000);
return 0;
}

и вывод

введите описание изображения здесь

Буду рад услышать ваши предложения!

0

Решение

Похоже, что вы действительно спрашиваете: «Как мне установить элементы экземпляра OpenCV Mat, который представляет изображение?» Немного Гуглинга производит это ссылка на сайт, который документирует интерфейс Mat. Включает функцию с этой подписью:

шаблон _Tp& Mat :: at (int i, int j)

Таким образом, вы должны иметь возможность совершать вызовы, такие как image.at (100,250), чтобы получить ссылку на данные пикселя для пикселя в 100,250. Затем присвойте данные пикселя пикселю.

Что касается того, как назначить данные пикселя в форме, которую матрица понимает … следующее также из вышеуказанной ссылки:

Если вы знакомы с обозначениями типов OpenCV CvMat, CV _ 8U … CV
_ 32FC3, CV _ 64FC2 и т. Д., Тогда тип примитива может быть определен как тип, для которого вы можете дать уникальный идентификатор в форме
CV_ {U | S | F} C. Универсальный OpenCV
структура, способная хранить один экземпляр такого примитивного типа данных
является Vec.

Так что, похоже, что OpenCV Vec типа int и size 3 могут быть совместимы. Что-то вроде:

image.at(i,j) = Vec<int,3>(r,g,b)

надеюсь, довольно близко к тому, что вы ищете.

Обратите внимание, что я не использовал OpenCV и не тестировал этот код; это только то, что я почерпнул из связанной документации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]