【发布时间】: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);
}
}
}
第一张图片中的白线应反转为黑线,但它不起作用。我用 Adobe Photoshop 检查了文件。当我指向图像的白色区域时,它显示颜色为白色 (#FFFFFF)。
我错过了什么?有谁能赐教吗?
【问题讨论】:
-
不清楚哪张图片属于哪一组代码。是不是把原图漏掉了?这有点重要。我猜 OP 中的第一张图片与原始图片相反。这就是“THRESH_BINARY_INV”所做的。我猜第二张图片是应用嵌套循环后得到的。嵌套循环应该恢复原始图像。让我感到困惑的是颜色深度。
cvtColor应该有 0(自动)或 1 作为最后一个参数,而不是 4(灰度图像应该有 1 个通道)。我不确定 color.WHITE/BLACK 对灰度图像意味着什么。尝试使用 255/0
标签: java android opencv image-processing bitmap