有沒有一種簡單的方法來使用OpenCV反轉蒙版?舉例來說,如果我有這樣的面具:OpenCV:反轉掩碼?
010
111
010
我想反轉,並得到這樣的:
101
000
101
注:我使用的OpenCV的Python綁定,因此,雖然它可能是可能只是簡單地遍歷掩碼中的每個元素,執行速度可能成爲一個問題。
有沒有一種簡單的方法來使用OpenCV反轉蒙版?舉例來說,如果我有這樣的面具:OpenCV:反轉掩碼?
010
111
010
我想反轉,並得到這樣的:
101
000
101
注:我使用的OpenCV的Python綁定,因此,雖然它可能是可能只是簡單地遍歷掩碼中的每個元素,執行速度可能成爲一個問題。
如果你有一個8位掩碼,那麼你應該做mask = 255 - mask
。 cv :: Mat減法運算符被重載以執行每個元素的標量減法。
對於使用255「的」值的8位掩碼:
mask = cv::Mat::ones(mask.size(), mask.type()) * 255 - mask;
我,因爲我仍然使用OpenCV的2.1.0我的項目之一使用這一個代替馬特1M溶液。
cv2.bitwise_not(mask)
將在這裏幫助
我覺得這樣的事情會處理,其中輸入掩碼可以有不同的非零值的情況下:
cv::Mat1b inputMask = ....;
cv::Mat1b invertedMask(inputMask.rows, inputMask.cols);
std::transform(
inputMask.begin(), inputMask.end(), invertedMask.begin(),
std::logical_not<uint8_t>()
);
使用[位NOT(HTTP:// opencv.willowgarage.com/documentation/python/operations_on_arrays.html#not)來翻轉矩陣中的所有位。 – 2010-07-20 14:40:03
我可能會做一些愚蠢和錯誤的事情,但我不認爲這是一個點點滴滴 - 不是我想要的......因爲那樣我最終會以'255,254,255,...'結尾。可能是因爲我的面具是一個「圖像」? – 2010-07-20 19:53:47
這取決於你的面具的位深度。通常掩碼應該有1位的深度,這會將單個位從0翻轉到1,反之亦然。您可能需要先將掩碼轉換爲1位深度圖像。 如果你有更大的位深度(例如4),那麼是的,它會從「0001」翻轉到「1110」以及從「0000」翻轉到「1111」 – 2010-07-20 21:24:54