Java BuffereImage灰度到RGB转换
我有一个8位灰度位图,我需要在上面做一些模式识别。我用java创建了第一个测试框架,效果很好Java BuffereImage灰度到RGB转换,java,image,bufferedimage,Java,Image,Bufferedimage,我有一个8位灰度位图,我需要在上面做一些模式识别。我用java创建了第一个测试框架,效果很好 之后,我将所有东西都移植到C++中,发现我的模式不再被找到。 经过一些调查,我意识到在java代码中有一个“隐藏”格式的变化,从TYPE_BYTE_GRAY变为TYPE_3BYTE_BGR 我可以将其制动至以下测试功能: public static void ConvertFiles(File dir, String format) { File[] images = getOrderedFil
之后,我将所有东西都移植到C++中,发现我的模式不再被找到。 经过一些调查,我意识到在java代码中有一个“隐藏”格式的变化,从TYPE_BYTE_GRAY变为TYPE_3BYTE_BGR
我可以将其制动至以下测试功能:public static void ConvertFiles(File dir, String format)
{
File[] images = getOrderedFiles(dir, format);
for (int i = 0; i < images.length; i++)
{
try
{
BufferedImage img = ImageIO.read(images[i]);
BufferedImage dst = new BufferedImage(img.getWidth() , img.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
for (int xTarget = 0; xTarget <img.getWidth(); xTarget++)
{
for (int yTarget = 0; yTarget <img.getHeight(); yTarget++)
{
int val = img.getRGB(xTarget, yTarget);
dst.setRGB(xTarget,yTarget, val);
}
}
ImageIO.write(dst, "bmp", new File(correctSlash(images[i].getParent()) + "Convert\\" + images[i].getName()));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
publicstaticvoidconvertfiles(文件目录,字符串格式)
{
文件[]图像=getOrderedFiles(目录,格式);
对于(int i=0;i for(int-xTarget=0;xTarget通过与同事(谢谢Holger)深入研究java代码(getRGB())找到了它
通过如下生成的查找表对原始灰度值进行转换:
l8Tos8 = new byte[256];
float input, output;
// algorithm for linear RGB to nonlinear sRGB conversion
// is from the IEC 61966-2-1 International Standard,
// Colour Management - Default RGB colour space - sRGB,
// First Edition, 1999-10,
// avaiable for order at http://www.iec.ch
for (int i = 0; i <= 255; i++) {
input = ((float) i) / 255.0f;
if (input <= 0.0031308f) {
output = input * 12.92f;
} else {
output = 1.055f * ((float) Math.pow(input, (1.0 / 2.4)))
- 0.055f;
}
l8Tos8[i] = (byte) Math.round(output * 255.0f);
}
l8Tos8=新字节[256];
浮点输入、输出;
//线性RGB到非线性sRGB转换算法
//来自IEC 61966-2-1国际标准,
//颜色管理-默认RGB颜色空间-sRGB,
//第一版,1999-10,
//可于http://www.iec.ch
对于(int i=0;我将在这里进行一次随机拍摄:它是否出于某种原因执行伽马校正?我对此进行了快速检查(在图像上执行了伽马校正),结果看起来很相似。知道这里使用的是哪种伽马吗?