2017-08-21 12 views
3

OpenCVを初めて使用しています。私はランダムなカラーイメージを作成しようとしています。最初に、ランダムなグレースケール画像を作成しようとしました。 Iが得られた出力はOpenCVでランダムカラー画像を作成する

enter image description here

ある

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

下に取り付けられたコードは、今は、ランダムカラー画像を作成するために、私の上記のコードを変更しました。

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

主な機能は同じです。そうしている間、私はランタイムエラーが発生します。どうすればいいのか教えてください。色空間の各ピクセルに3つのコンポーネントRGBがあることを私が理解しています。したがって、私は各ピクセルの3つの要素すべてを変更しています。私は私が望むものを得ていない。

+2

を使用してください/core/doc/operations_on_arrays.html#randu)?例えば'cv :: randu(image、0、256);' || 「主な機能は変わらない」 - その場合、1チャンネルの画像を作成し、それを3チャンネル画像のようにアクセスしようとします。 –

+1

どのようなエラーが発生しますか?エラートレースを投稿してください。また、私が知っている限り、OpenCVは 'RGB'ではなく' BGR'値を扱いますので、注意してください。 – DarkCygnus

答えて

4

この行はグレースケールイメージを作成しますが、3つのチャネルはありません。あなたはこの行を使用するときに意味

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

は、そのがクラッシュするつもりは:

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

あなたはそれが1つのチャネル(C1)を作成するため、CV_8UC1を使用する代わりに、CV_8UC3

Mat img=Mat::zeros(100,100,CV_8UC3); 
でそれを試してみませんする必要があります

FYI 8uは8ビットであり、0〜255の値を意味し、CXは画像内のチャネル数です。 BGRが必要な場合はC3が必要です。 [ `CV :: randu`](http://docs.opencv.org/2.4/modulesを使用しないのはなぜ

+0

ありがとうございました – Abhishek

2

車輪の再発明する必要はありません、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

関連する問題