[英]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.