簡體   English   中英

基於另一個圖像訪問和更改像素的顏色-OpenCV C ++

[英]access and change color of pixels based on another image - opencv c++

我有兩種不同格式的圖像。 一個是BGR,另一個是黑白(只有黑白,沒有灰色像素)。 其圖像完全相同(大小和像素相同)。 我想在黑白圖像中找到所有白色像素,將它們標記下來,然后在BGR圖像中找到完全相同的像素(顯然,它們在BGR圖像中是彩色的),然后將它們着色為黑色。 我試過了,但問題是黑白圖像有1個通道,BGR一個有3個通道,所以我失敗了...我在c ++中使用opencv,感謝您的幫助! :)

for(int y=0;y<inputImage.rows;y++){
    for(int x=0;x<inputImage.cols;x++){
        Vec3b color = inputImage.at<Vec3b>(Point(x,y));
        if(blackWhite.at<uchar>(y,x) == 255){
            //cout << "found white pixel\n";
            color[0] = 0;
            color[1] = 0;
            color[2] = 0;
            inputImage.at<Vec3b>(Point(x,y)) = color;
        }
    }
}

inputImage是我的BGR圖像,blackWhite是具有黑白像素的相同大小的圖像。 兩者都是Mat對象。 我想遍歷blackWhite圖像,每當我找到一個白色像素時,就將inputImage圖像中的相同像素用黑色上色。

我的策略是構造一個類似於blackWhite圖像的數組。 這個數組將是零和一,我們將其與inputImage相乘以獲得所需的輸出。

當前,您的blackWhite圖像看起來像(例如)

blackWhite = 255 255   0   0 ....
....

用偽代碼。 如果我們將此圖像轉換為

newArray  =    0   0   1   1 ....
 ....

然后,您可以使用cv :: multiply (newArray,inputImage)獲得所需的輸出。

將現有的blackWhite圖像直接轉換為newArray的一種方法是對blackWhite中的每個像素執行y =(-1/255)* x +1。 您可以使用cv :: Mat :: convertTo (outputImage,8,-1/255,1)完成此操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM