【问题标题】:Inverting black and white on a bitmap is not working在位图上反转黑白不起作用
【发布时间】:2020-01-10 15:32:23
【问题描述】:

我用 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);
            }
        }
    }

第一张图片中的白线应反转为黑线,但它不起作用。我用 Adob​​e Photoshop 检查了文件。当我指向图像的白色区域时,它显示颜色为白色 (#FFFFFF)。

我错过了什么?有谁能赐教吗?

【问题讨论】:

  • 不清楚哪张图片属于哪一组代码。是不是把原图漏掉了?这有点重要。我猜 OP 中的第一张图片与原始图片相反。这就是“THRESH_BINARY_INV”所做的。我猜第二张图片是应用嵌套循环后得到的。嵌套循环应该恢复原始图像。让我感到困惑的是颜色深度。 cvtColor 应该有 0(自动)或 1 作为最后一个参数,而不是 4(灰度图像应该有 1 个通道)。我不确定 color.WHITE/BLACK 对灰度图像意味着什么。尝试使用 255/0

标签: java android opencv image-processing bitmap


【解决方案1】:

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

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

int invertedPixel = (0xFFFFFF - pixel) | 0xFF000000;
bitmapCopy.setPixel(x,y, invertedPixel);

【讨论】:

    【解决方案2】:

    您可以使用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)
    

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 2012-12-01
      • 2021-10-08
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2022-09-28
      • 2015-03-21
      相关资源
      最近更新 更多