我是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>
获得的输出是
现在我改变了上面的代码来创建一个随机彩色图像。
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。因此,我正在改变每个像素的所有三个组成部分。我没有得到我想要的输出。
答案 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;
}
答案 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。