我正在使用Mindtct(NBIS软件)。 运行程序时,出现以下错误:
错误:read_and_decode_grayscale_image:D:\ Users \ Malik \ Desktop \ cd642acd \ cd642acd_1 \ I1_S1.png:图像深度:24!= 8
Mindtct是一种提取指纹细节的工具:它仅接受DPI等于8位的灰度图像,但我使用的指纹传感器显然生成的DPI等于24位的图像。
我的问题是: 如何在JAVA(OpenCV),C ++或什至另一种语言中更改图像深度(将其从24bits减少到8bits)?
./mindtct.exe -m1 $pathImage $imageNameResult
答案 0 :(得分:0)
解决方案:
第一种方法:(此版本需要OpenCV .jar)
public static void main(String args[]) {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
String file = "AbsolutePathToTheSRCImage2.png";
Mat src = Imgcodecs.imread(file);
Mat dst = new Mat();
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);
Imgcodecs.imwrite("AbsolutePathToTheDSTImage2", dst);
}
如果不想使用OpenCV库,则可以使用以下经典方法:
第二种方法:
BufferedImage img = new BufferedImage(width, height,BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = img.getRaster();
WritableRaster rasterJPEG = image.getRaster();
for(int h=0; h<height; h++)
for(int w=0; w<width; w++) {
int[] p = new int[4];
rasterJPEG.getPixel(w, h, p);
p[0] = (int) (0.3 * p[0]);
p[1] = (int) (0.59 * p[1]);
p[2] = (int) (0.11 * p[2]);
int y = p[0] + p[1] + p[2];
raster.setSample(w,h,0,y);
}
return img;