为了账号安全,请及时绑定邮箱和手机立即绑定

在位图上反转黑白不起作用

在位图上反转黑白不起作用

www说 2023-07-19 10:14:30
我用 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个赞

您可以使用按位不反转图像。一般来说,您希望避免迭代每个像素,因为它非常慢。

原来的

//img3.sycdn.imooc.com/64b7485f00014ae225600961.jpg

结果

//img2.sycdn.imooc.com/64b7486f00016c4225600963.jpg

这里有两种反转图像的方法。使用内置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)


查看完整回答
反对 回复 2023-07-19
?
青春有我

TA贡献1784条经验 获得超8个赞

您的输入是灰度图像。所以只有纯白色才会变成黑色,其他一切都会变成白色。


我对 opencv 不熟悉,所以这可能行不通。但值得一试。


int invertedPixel = (0xFFFFFF - pixel) | 0xFF000000;

bitmapCopy.setPixel(x,y, invertedPixel);


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信