Java图像通道顺序变换(rgb转为bgr)原理
要使得rgb和bgr互换,只需调换r和b通道。Java中借助BufferedImage进⾏转化,详见代码。
效果
Java 代码
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class RGB2BGR {
public static void main(String[] args)throws IOException {
FileInputStream fileInputStream =new FileInputStream("d:\\rgb.jpg");
byte[] imgBytes =new byte[fileInputStream.available()];
fileInputStream.close();
BufferedImage bufferedImage = ad(new ByteArrayInputStream(imgBytes));
int width = Width();python转java代码
int height = Height();
// 获取图⽚中每个rgb像素的int类型表⽰
int[] rgbPixels = RGB(0,0, width, height, null,0, width);
int[] bgrPixels =new int[rgbPixels.length];
for(int i =0; i < rgbPixels.length; i++){
int color = rgbPixels[i];
int red =((color &0x00FF0000)>>16);
int green =((color &0x0000FF00)>>8);
int blue = color &0x000000FF;
/
/ 将rgb三个通道的数值合并为⼀个int数值,同时调换b通道和r通道
bgrPixels[i]=(red &0x000000FF)|(green <<8&0x0000FF00)|(blue <<16&0x00FF0000); }
bufferedImage.setRGB(0,0, width, height, bgrPixels,0, width);
ImageIO.write(bufferedImage,"jpg",new File("d:\\bgr.jpg"));
}
}
python代码
import cv2
img = cv2.imread('d:\\rgb.jpg')
img = img[:,:,(2,1,0)]
cv2.imwrite('d:\\bgr.jpg',img)
Java vs Python 代码量
Life is short, you need Python
参考⽂章
wwwblogs/roucheng/p/3527655.html
blog.csdn/river66/article/details/89514816思路来源
⾛过的弯路:ColorConvertOp只能在不同颜⾊空间之间相互转换,rgb和bgr都属于ColorSpace.CS_sRGB(可以调试观察BufferedImage的各个属性值),所以下⾯的转换是失败的,转换后的图⽚和转换前是⼀样的,因为都是同个颜⾊空间,所以底层只是做了复制,具体可以查看源码。
// 转RGB格式
// 参考:www.zhangshengrong/p/2EaE0rPR1M/
BufferedImage rgbImage =new Width(), Height(), bgrImage.TYPE_3BYTE_BGR);
new Instance(ColorSpace.CS_sRGB), null).filter(bgrImage, rgbImage);
ImageIO.write(rgbImage,"jpg",new File("d:\\rgb.jpg"));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论