我非常熟悉OpenCV 1.1中使用的IPL圖像格式。不過,我正在使用最新的2.4版本,並希望切換到OpenCV的C++接口。這裏是我訪問圖像中的像素的方法:從IPLImage到Mat
int step = img->widthStep;
int height = img->height;
int width = img->width;
unsigned char* data = (unsigned char*) img->imageData;
for (int i=0; i<height; i++)
{
for (int j=0; j<step; j+=3) // 3 is the number of channels.
{
if (data[i*step + j] > 200) // For blue
data[i*step + j] = 255;
if (data[i*step + j + 1] > 200) // For green
data[i*step + j + 1] = 255;
if (data[i*step + j + 2] > 200) // For red
data[i*step + j + 2] = 255;
}
}
我需要將這個精確的代碼塊轉換爲Mat結構的幫助。我在這裏和那裏發現了幾個函數,但是如果我將整個上面幾行的確切轉換完成,這將非常有用。
在IPL圖像所做的一切,然後轉換回 - 將這種速度夠快嗎?我不希望這個過程需要一些額外的處理時間。而對於複雜的事情 - 這只是一個示例代碼,假設我需要爲紅色綠色和藍色給出不同的閾值。你的方法會工作嗎? – Soumyajit 2013-05-07 17:46:10
當您在Mat和IplImage之間進行轉換時,您可以選擇是否複製數據。如果你不復制,開銷很小。即使你複製,我懷疑你的整個處理花費的時間超過1秒左右,開銷是顯着的。增加了不同的門檻。 – guinny 2013-05-08 12:19:24
如果矩陣有一個步驟,則您的代碼不起作用。例如,爲創建爲另一個矩陣的ROI的矩陣標題。使用迭代器或行指針訪問來避免這種錯誤! – ypnos 2013-10-25 01:06:04