我想玩一些OpenCV,並想出了一個有趣的小場景工作。 (x,y),(x + 1,y)(x,y + 1)和(x + 1,y)的顏色值相加, y + 1))並將結果除以4得到平均顏色值。然後,我處理的下一組像素是(x + 2,y + 2),它有3個相鄰像素。有效的方式訪問opencv Mat元素
然後,我也希望能夠做一個類似的事情,但與9像素(與選定的座標作爲中心工作)。
最初我從高斯模糊類型掩模開始,但這不是我想要的結果。從這些計算中,我只想得到1個像素值。所以輸出圖像將是1/4或1/9的大小。所以現在我已經得到了它的工作,我已經從字面上寫出來的計算在for循環:
for (int i = 1; i < myImage.rows -1; i++)
{
b = 0;
for (int k = 1; k < myImage.cols -1; k++)
{
//9 pixel radius
Result.at<Vec3b>(a, b)[1] = (myImage.at<Vec3b>(i-1, k-1)[1]+myImage.at<Vec3b>(i-1, k)[1]+myImage.at<Vec3b>(i+1, k)[1] + myImage.at<Vec3b>(i, k)[1]+myImage.at<Vec3b>(i, k-1)[1]+myImage.at<Vec3b>(i, k+1)[1] + myImage.at<Vec3b>(i + 1, k+1)[1] + myImage.at<Vec3b>(i-1, k + 1)[1] + myImage.at<Vec3b>(i + 1, k - 1)[1])/9;
Result.at<Vec3b>(a, b)[2] = (myImage.at<Vec3b>(i-1, k-1)[2]+myImage.at<Vec3b>(i-1, k)[2]+myImage.at<Vec3b>(i+1, k)[2] + myImage.at<Vec3b>(i, k)[2]+myImage.at<Vec3b>(i, k-1)[2]+myImage.at<Vec3b>(i, k+1)[2] + myImage.at<Vec3b>(i + 1, k+1)[2] + myImage.at<Vec3b>(i-1, k + 1)[2] + myImage.at<Vec3b>(i + 1, k - 1)[2])/9;
Result.at<Vec3b>(a, b)[0] = (myImage.at<Vec3b>(i-1, k-1)[0]+myImage.at<Vec3b>(i-1, k)[0]+myImage.at<Vec3b>(i+1, k)[0] + myImage.at<Vec3b>(i, k)[0]+myImage.at<Vec3b>(i, k-1)[0]+myImage.at<Vec3b>(i, k+1)[0] + myImage.at<Vec3b>(i + 1, k+1)[0] + myImage.at<Vec3b>(i-1, k + 1)[0] + myImage.at<Vec3b>(i + 1, k - 1)[0])/9;
//4 pixel radius
// Result.at<Vec3b>(a, b)[1] = (myImage.at<Vec3b>(i, k)[1] + myImage.at<Vec3b>(i + 1, k)[1] + myImage.at<Vec3b>(i, k + 1)[1] + myImage.at<Vec3b>(i, k - 1)[1] + myImage.at<Vec3b>(i - 1, k)[1])/5;
// Result.at<Vec3b>(a, b)[2] = (myImage.at<Vec3b>(i, k)[2] + myImage.at<Vec3b>(i + 1, k)[2] + myImage.at<Vec3b>(i, k + 1)[2] + myImage.at<Vec3b>(i, k - 1)[2] + myImage.at<Vec3b>(i - 1, k)[2])/5;
// Result.at<Vec3b>(a, b)[0] = (myImage.at<Vec3b>(i, k)[0] + myImage.at<Vec3b>(i + 1, k)[0] + myImage.at<Vec3b>(i, k + 1)[0] + myImage.at<Vec3b>(i, k - 1)[0] + myImage.at<Vec3b>(i - 1, k)[0])/5;
b++;
}
a++;
}
顯然,這是可以設置被稱爲兩個選項不同的功能,但我我只是想知道是否有更高效的方法來實現這一點,這會讓掩碼的大小發生改變。
感謝您的幫助!
這聽起來像你只是談論與線性插值調整圖像大小。 – beaker
您是否打算用opencv實現這種最高效的方式,或者您想學習如何使用opencv進行高效的像素訪問? – bendervader
我的意圖主要是找到一種更容易的方法來改變用於創建輸出的像素的數量,而不僅僅是將其全部寫出來,這與opencv相關。它能很好地使用輸入算法。而不僅僅是一長串手寫代碼來完成一組不同的輸入。 – FreakShow