gpt4 book ai didi

java - 如何使用 OpenCV 将图像转换为黑白图像并去除 android 中的阴影

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:06 28 4
gpt4 key购买 nike

我有一段代码可以使用这段代码将 RGB 位图转换为黑白位图:

  public static Bitmap setDefaultValues(Bitmap bmp) {

Mat srcMat = new Mat();
org.opencv.android.Utils.bitmapToMat(bmp, srcMat, true);


final Bitmap bitmap = Bitmap.createBitmap(srcMat.clone().width(), srcMat.clone().height(), Bitmap.Config.ARGB_8888);

Imgproc.cvtColor(srcMat, srcMat, Imgproc.COLOR_BGR2GRAY, 0);

Mat srcMat1 = srcMat;
Imgproc.GaussianBlur(srcMat1, srcMat1, new Size(3, 3), 0);

//Mat srcMat1 = new Mat(srcMat.rows(), srcMat.cols(), CV_8UC1);
//int kernalsize = 3;
//Imgproc.bilateralFilter(srcMat, srcMat1, kernalsize, kernalsize * 2, kernalsize / 2);

srcMat1.convertTo(srcMat1, 0, 1.9, -120);
srcMat1.convertTo(srcMat1, CvType.CV_8U, 1.9, -120);
Imgproc.cvtColor(srcMat1, srcMat1, Imgproc.COLOR_GRAY2RGBA, 4);

org.opencv.android.Utils.matToBitmap(srcMat, bitmap, true);
return bitmap;

}

我已经实现了将 RGB 图像转换为黑白图像的代码。这是正确的返回我,但我的问题是我无法从图像中删除阴影。

我也比较了其他应用程序,这是完美转换,我不明白我错在哪里。

这是原图: enter image description here

这是我的应用输出 enter image description here

这是其他应用程序的输出 enter image description here enter image description here

所以请帮助我如何实现我的目标。

最佳答案

请使用以下代码将彩色图像转换为黑白图像。

public static Bitmap createContrast(Bitmap src, double value) {
// image size
int width = src.getWidth();
int height = src.getHeight();
// create output bitmap
Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
// color information
int A, R, G, B;
int pixel;
// get contrast value
double contrast = Math.pow((100 + value) / 100, 2);

// scan through all pixels
for(int x = 0; x < width; ++x) {
for(int y = 0; y < height; ++y) {
// get pixel color
pixel = src.getPixel(x, y);
A = Color.alpha(pixel);
// apply filter contrast for every channel R, G, B
R = Color.red(pixel);
R = (int)(((((R / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
if(R < 0) { R = 0; }
else if(R > 255) { R = 255; }

G = Color.red(pixel);
G = (int)(((((G / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
if(G < 0) { G = 0; }
else if(G > 255) { G = 255; }

B = Color.red(pixel);
B = (int)(((((B / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
if(B < 0) { B = 0; }
else if(B > 255) { B = 255; }

// set new pixel color to output bitmap
bmOut.setPixel(x, y, Color.argb(A, R, G, B));
}
}

return bmOut;}

关于java - 如何使用 OpenCV 将图像转换为黑白图像并去除 android 中的阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46728337/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com