2013-01-18 42 views
2

我有這個矩陣,如何在範圍[0,1]中切換矩陣中的元素?

0 1 0 
1 0 1 
0 1 0 

我想切換每個1值元素爲0,反之亦然:

1 0 1 
0 1 0 
1 0 1 

如果我使用bitwise complement operator即​​我得到這個結果

255 254 255 
254 255 254 
255 254 255 

cource的我可以得到我想要的一些算術和循環的結果。但是有沒有簡單的方法來實現OpenCV中我想要的矩陣?謝謝。

更新:

這裏是代碼片段:

#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 

int main() 
{ 
    cv::Mat a = (cv::Mat_<uchar>(3,3) << 0, 1, 0, 
             1, 0, 1, 
             0, 1, 0); 
    cv::Mat b = ~a; 
    std::cout << b << std::endl; 

    return 0; 
} 
+0

使用布爾變換? – Shmiddty

+0

Shmiddty:你的建議是可能的,但我不想改變矩陣類型。該矩陣是CV_8U,用於「正常」圖像。對於某些圖像分析,它被標準化爲[0,1],最後再次歸一化爲[0,255]。 – flowfree

+0

你有沒有試過用'!'運營商呢? '〜'操作符只是反轉位。 – Grieverheart

回答

4

如果只有oneszeros,你可以這樣做:

cv::Mat b = 1 - a;

1

試試這個:

dst = src ? 0 : 1; 

這將在src值隱式轉換爲bool
請注意,任何其他src值比1也將使用該語句設置爲0

+0

@bsdnoobz我重寫了它,省略了演員陣容(無論如何,這是一個愚蠢的想法,我在第一版中強調了這一點)。 –

1

這裏是另一種解決方案

dst = !src 

它可以節省你一些字母鍵入

+1

沒有爲'cv :: Mat'定義'!'運算符。 – sgarizvi

+0

定義它,或者申請每個元素。有沒有辦法直接與OpenCV – Sam

+0

@sammy ..檢查我的答案。 – sgarizvi

3

還有一選項是

dst = 1 - src; 

儘管如果您的數組中有任何不在[1,0]中的數據將會失敗。