2012-10-10 79 views
0

我是C++的新手,我试图创建一个500x500像素的RGB图像。图像应该由四种颜色的线性插值来填充,每次角落的一个定义,所以我应该是这样:C++ - 彩色像素

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

我不明白这与C++本身有什么关系。 – Jack

回答

1

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

模板_TP &垫::在(INT I,诠释J)

所以,你应该能够作出这样image.at电话(100,250)以获得对100,250处的像素的像素数据的参考。然后,将像素数据分配给像素。

至于如何在矩阵理解的形式分配的像素数据......下面也从上面的链接:

如果您熟悉CvMat中的OpenCV的类型符号,CV _ 8U ... CV _ 32FC3,CV _ 64FC2等,那么原始类型可以定义为一种类型,您可以通过以下形式给出唯一标识符:CV_ {U | S | F} C。能够存储这种基本数据类型的单个实例的通用OpenCV 是Vec。

所以,它听起来像一个OpenCV类型为int和大小为3的Vec可能是兼容的。类似于:

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

有希望与您正在寻找的内容相当接近。

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