我的標題可能不夠清晰,但請仔細看下面的描述。提前感謝。Opencv obatin基於mask的某個像素RGB值
我有一個RGB圖像和二值遮掩圖像:
Mat img = imread("test.jpg")
Mat mask = Mat::zeros(img.rows, img.cols, CV_8U);
給予一定的人的面具,承擔者的數量是N.現在非零座標是已知的,基於這些座標,我們可以確保獲得原產image.I的對應像素的RGB值,知道這可以通過下面的代碼來完成:
Mat colors = Mat::zeros(N, 3, CV_8U);
int counter = 0;
for (int i = 0; i < mask.rows; i++)
{
for (int j = 0; j < mask.cols; j++)
{
if (mask.at<uchar>(i, j) == 1)
{
colors.at<uchar>(counter, 0) = img.at<Vec3b>(i, j)[0];
colors.at<uchar>(counter, 1) = img.at<Vec3b>(i, j)[1];
colors.at<uchar>(counter, 2) = img.at<Vec3b>(i, j)[2];
counter++;
}
}
}
而且COORDS將如下: enter image description here
但是,這兩層for循環花費了太多時間。我想知道是否有更快的方法來抑制顏色,希望你們能理解我想表達的內容。
PS:如果我可以使用Python,這隻能在一個句子來完成:
colors = img[mask == 1]
爲什麼當你沒有存儲座標時,目標'Mat'稱爲'coords',而是來自輸入圖像的像素值? |此外,該Python代碼不正確,numpy數組不可調用。你的意思是'img [mask == 1]'?此外,它也不會生成一個座標列表。 –
謝謝你的友善提醒:) – Terry