在位图上反转黑白不起作用
Inverting black and white on a bitmap is not working
我用 OpenCV 做了一些图像处理。我想反转这个位图(黑到白,白到黑),但我遇到了一些问题。
这样做后我得到了这个位图:
// 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);
这是反转后的结果。
这是我的代码:
// 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)。
我错过了什么?有没有大神能指教一下?
您输入的是灰度图像。所以只有纯白色会变成黑色,其他都是白色。
我不熟悉 opencv,所以这可能行不通。但值得一试。
int invertedPixel = (0xFFFFFF - pixel) | 0xFF000000;
bitmapCopy.setPixel(x,y, invertedPixel);
您可以使用 bitwise-not 来反转图像。通常,您希望避免遍历每个像素,因为它非常慢。
原创
结果
这里有两种反转图像的方法。使用内置的 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)
我用 OpenCV 做了一些图像处理。我想反转这个位图(黑到白,白到黑),但我遇到了一些问题。
这样做后我得到了这个位图:
// 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);
这是反转后的结果。
这是我的代码:
// 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)。
我错过了什么?有没有大神能指教一下?
您输入的是灰度图像。所以只有纯白色会变成黑色,其他都是白色。
我不熟悉 opencv,所以这可能行不通。但值得一试。
int invertedPixel = (0xFFFFFF - pixel) | 0xFF000000;
bitmapCopy.setPixel(x,y, invertedPixel);
您可以使用 bitwise-not 来反转图像。通常,您希望避免遍历每个像素,因为它非常慢。
原创
结果
这里有两种反转图像的方法。使用内置的 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)