【问题标题】:C++ - Coloured PixelsC++ - 彩色像素
【发布时间】:2012-10-01 13:16:02
【问题描述】:

我是 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

最终结果应该是这样的:

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

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

输出是

很高兴听到您的建议!

【问题讨论】:

  • 我看不出这与 C++ 本身有什么关系..

标签: c++ colors interpolation pixels


【解决方案1】:

听起来您真正要问的是“如何设置代表图像的 OpenCV Mat 实例的元素?”用谷歌搜索会产生这个link,它记录了 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。

所以,听起来 int 类型和大小为 3 的 OpenCV Vec 可能是兼容的。比如:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多