我用 OpenCV 進行一些圖像處理。我想反轉這個位圖(黑到白,白到黑),但我遇到了一些問題。這樣做后我得到了這個位圖:// to greyImgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY, 4);Imgproc.adaptiveThreshold(mat, mat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4);Utils.matToBitmap(mat, bitmapCopy);這是反轉后的結果。這是我的代碼: // to grey Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY, 4); Imgproc.adaptiveThreshold(mat, mat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4); Utils.matToBitmap(mat, bitmapCopy); for(int y = 0; y < bitmapCopy.getHeight(); y++){ for(int x = 0; x < bitmapCopy.getWidth(); x++){ int pixel = bitmapCopy.getPixel(x,y); if (pixel == Color.WHITE){ bitmapCopy.setPixel(x, y, Color.BLACK); } else { bitmapCopy.setPixel(x, y, Color.WHITE); } } }第一個圖像中的白線應該反轉為黑線,但它不起作用。我用 Adobe Photoshop 檢查了該文件。當我指向圖像的白色區域時,它顯示顏色是白色(#FFFFFF)。我缺少什么?有人可以啟發我嗎?
2 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
您可以使用按位不反轉圖像。一般來說,您希望避免迭代每個像素,因為它非常慢。
原來的
結果
這里有兩種反轉圖像的方法。使用內置cv2.bitwise_not()函數或僅減去 255。它是在 Python 中實現的,但同樣的想法也可以在 Java 中使用。
import cv2
image = cv2.imread('1.png')
result = 255 - image
alternative_result = cv2.bitwise_not(image)
cv2.imshow('image', image)
cv2.imshow('result', result)
cv2.imshow('alternative_result', alternative_result)
cv2.waitKey(0)

青春有我
TA貢獻1784條經驗 獲得超8個贊
您的輸入是灰度圖像。所以只有純白色才會變成黑色,其他一切都會變成白色。
我對 opencv 不熟悉,所以這可能行不通。但值得一試。
int invertedPixel = (0xFFFFFF - pixel) | 0xFF000000;
bitmapCopy.setPixel(x,y, invertedPixel);
添加回答
舉報
0/150
提交
取消