私は3チャンネルマトリックスの要素に値を割り当てる効率的な方法を探しています。特に、私は、次のように初期化された2D cv::Mat
の要素にHSV値を割り当てる必要があり:このマトリックスについて特定のピクセルにHSV値を割り当てますか?
cv::Mat clusterImage(height,width,CV_8UC3,cv::Scalar(0,0,0));
、IはHSV値に行i
及び列j
内のピクセルを設定しない方法(H = 59、S = 255、V = 255)、できるだけ効率的に?
私の現在の方法(完全なコード)は以下の通りです。私の懸念は、行列をチャンネルに分割し、それらのチャンネルを編集してから再び結合することはあまり効率的ではありません。特に、30Hz以上のループで行う必要があるからです。より効率的な方法が存在するか?
#include <vector>
#include <stdlib.h>
#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;
int main() {
int height = 480;
int width = 640;
cv::Mat clusterImage(height,width,CV_8UC3,cv::Scalar(0,0,0));
vector<cv::Mat> channels(3);
// split the channels
split(clusterImage, channels);
// modify the channels
vector<int> i;
vector<int> j;
int numberOfDots = 1000;
for (int k=0; k<numberOfDots; k++) {
i.push_back(rand() % height + 1);
j.push_back(rand() % width + 1);
}
for (int k=0; k<numberOfDots; k++) {
channels[0].at<unsigned char>(i[k],j[k]) = 59;
channels[1].at<unsigned char>(i[k],j[k]) = 255;
channels[2].at<unsigned char>(i[k],j[k]) = 255;
}
// merge channels
merge(channels, clusterImage);
// convert to RGB and draw
cv::cvtColor(clusterImage, clusterImage, CV_HSV2BGR);
imshow("test_window", clusterImage);
cv::waitKey(0);
return 0;
}
これは重複ではありません!私はもう一つの質問だったし、私は答えを全く理解していない。 –
次に、試したコードとそれがなぜ機能していないのかを詳しく説明します。あなたがそれを編集した後で、あなたの質問を再開するのに迷惑をかけるかもしれません。 –
私のコードで編集しました –