Я новичок в 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;
}
и вывод
Буду рад услышать ваши предложения!
Похоже, что вы действительно спрашиваете: «Как мне установить элементы экземпляра 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 и не тестировал этот код; это только то, что я почерпнул из связанной документации.
Других решений пока нет …