我正在尋找一種將值分配給3通道矩陣元素的有效方法。具體地講,我需要HSV值分配給被初始化的2D cv::Mat
的元件如下:將HSV值分配給特定像素?
cv::Mat clusterImage(height,width,CV_8UC3,cv::Scalar(0,0,0));
對於該矩陣,如何設置在i
行和列j
到HSV值的像素(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;
}
這不是重複的!我是另一個問題,我根本不明白答案。 –
然後詳細說明您嘗試過的代碼以及爲什麼它不起作用。也許有人會在編輯完成後重新打開你的問題。 –
我用我的代碼 –