Abh*_*hek 4 c++ opencv computer-vision
我是OpenCV的新手.我正在尝试创建一个随机的彩色图像.首先,我尝试创建一个随机灰度图像.我在下面附上的代码
void random_colour(Mat input_image) {
for (int i = 0; i < image.rows; i++)
for (int j = 0; j < image.cols; j++)
image.at<uchar>(i,j)= rand()%255;
imwrite("output.tif",image);
}
int main( int argc, char** argv )
{
Mat img=Mat::zeros(100,100,CV_8UC1);
random_colour(img);
waitKey(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
获得的输出是
现在我改变了上面的代码来创建一个随机彩色图像.
void random_colour(Mat input_image) {
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
image.at<Vec3b>(i,j)[0] = rand()%255;
image.at<Vec3b>(i,j)[1] = rand()%255;
image.at<Vec3b>(i,j)[2] = rand()%255;
}
}
imwrite("output.tif",image);
}
Run Code Online (Sandbox Code Playgroud)
主要功能保持不变.这样做时,我收到运行时错误.请帮我说明我该怎么做.我所理解的是,色彩空间中的每个像素都有三个分量RGB.因此,我正在改变每个像素的所有三个组成部分.我没有得到我想要的输出.
无需重新发明轮子,请使用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;
}
Run Code Online (Sandbox Code Playgroud)
这条线创建了一个灰度图像,它没有三个通道。
Mat img=Mat::zeros(100,100,CV_8UC1);
Run Code Online (Sandbox Code Playgroud)
这意味着当你使用这条线时,它会崩溃:
image.at<Vec3b>(i,j)[0] = rand()%255;
Run Code Online (Sandbox Code Playgroud)
您不需要使用 CV_8UC1 因为这会创建 1 个通道 (C1) 尝试使用 CV_8UC3 代替
Mat img=Mat::zeros(100,100,CV_8UC3);
Run Code Online (Sandbox Code Playgroud)
仅供参考 8u 表示 8 位,因此值为 0 到 255,CX 是图像中的通道数。如果你想要 BGR,你需要 C3。
| 归档时间: |
|
| 查看次数: |
4170 次 |
| 最近记录: |