在OpenCV中创建一个随机的彩色图像

时间:2017-08-21 16:15:27

标签: c++ opencv computer-vision

我是OpenCV的新手。我正在尝试创建一个随机的彩色图像。首先,我尝试创建一个随机灰度图像。我在下面附上的代码

<xs:schema 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="xml">
    <xs:complexType>
        <xs:sequence>
            <xs:element name='XYZ'>
              <xs:simpleType>
                <xs:restriction base="xs:nonNegativeInteger">
                  <xs:enumeration value="1"/>
                  <xs:enumeration value="2"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
 </xs:element>
</xs:schema>

获得的输出是

documentation

现在我改变了上面的代码来创建一个随机彩色图像。

The 'XYZ' element is invalid - The value '3' is invalid according to its datatyp
e 'NonNegativeInteger' - The Enumeration constraint failed. Line: 2 Column: 10

主要功能保持不变。这样做时,我收到运行时错误。请帮我说明我该怎么做。我所理解的是,色彩空间中的每个像素都有三个分量RGB。因此,我正在改变每个像素的所有三个组成部分。我没有得到我想要的输出。

2 个答案:

答案 0 :(得分:6)

无需重新发明轮子,请使用cv::randu()

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"

using namespace cv;

int main(int argc, char** argv)
{
    Mat img(100, 100, CV_8UC3);
    randu(img, Scalar(0, 0, 0), Scalar(255, 255, 255));

    imshow("random colors image", img);
    waitKey();

    return 0;
}

enter image description here

答案 1 :(得分:4)

此行创建灰度图像,它没有三个通道。

 Mat img=Mat::zeros(100,100,CV_8UC1);

这意味着当你使用这一行时,它会崩溃:

 image.at<Vec3b>(i,j)[0] = rand()%255;

你需要不使用CV_8UC1,因为这会创建1个通道(C1)尝试使用CV_8UC3而不是

Mat img=Mat::zeros(100,100,CV_8UC3);

FYI 8u表示8位,因此值0到255,CX是图像中的通道数。如果你想要BGR,你需要C3。