C ++ - 彩色像素

时间:2012-10-10 23:26:51

标签: c++ colors interpolation pixels

我是C ++的新手,我正在尝试创建一个500x500像素的RGB图像。图像应该通过四种颜色的线性插值填充,每种颜色都定义为一个角,所以我应该有类似的东西:

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

最终结果应如下所示:

enter image description here

程序然后在窗口等中显示图像......我可以做那些东西,但我只需要弄清楚如何将颜色放在图像中。到目前为止我的代码是:

#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;
}

,输出

enter image description here

我很高兴听到您的建议!

1 个答案:

答案 0 :(得分:1)

听起来你真正问的是'如何设置代表图像的OpenCV Mat实例的元素?'一个小的谷歌搜索产生这个link,它记录了Mat接口。它包含一个带有此签名的函数:

  

模板_Tp&amp; 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。

因此,它听起来像int类型和大小3的OpenCV Vec可能是兼容的。类似的东西:

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

非常接近您所寻找的目标。

请注意,我没有使用OpenCV,我没有测试过这段代码;这正是我从链接文档中收集的内容。