OpenCV4.2 Java 操作图片像素及cvtColor详解

package com.opencv;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class OpenCVDemo {
	public static void main(String[] args) {
		/*	1.加载本地动态链接库
		 * 	加载动态链接库有很多种方法,也可以写成static静态代码块。
		 */
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

		/*	2 读取测试图片
		 *	imread:输入图片所在地址,返回Mat矩阵对象。
		 *	Mat对象中保存着加载图片的大小、通道、像素数据等等与图片有关的数据
		 */
		Mat image = Imgcodecs.imread("c:\\123.jpg");
		/*	3. 图片转为单通道
		 *  将图像从一种颜色空间转换为另一种颜色空间。
		 *	该功能将输入图像从一种颜色空间转换为另一种颜色空间。
		 *	在从RGB颜色空间转换的情况下,应明确指定通道的顺序(RGB或BGR)。
		 *	请注意,OpenCV中的默认颜色格式通常称为RGB,但实际上是BGR(字节是相反的)。因此,
		 *	标准(24位)彩色图像中的第一个字节将是8位蓝色分量,第二个字节将是绿色分量,第三个字节将是红色分量。
		 *	第四,第五和第六个字节将是第二个像素(蓝色,然后是绿色,然后是红色),依此类推。
		 *	R,G和B通道值的常规范围是:
		 *	CV_8U图像为0至255
		 *	CV_16U图像为0至65535
		 *	CV_32F图像为0到1
		 *	在线性变换的情况下,范围无关紧要。
		 *	但是在进行非线性转换的情况下,应将输入的RGB图像规范化为适当的值范围,以获得正确的结果,
		 *	例如,对于RGB到LUV(LUV色彩空间全称CIE 1976(L*,u*,v*) (也作CIELUV)色彩空间,L*表示物体亮度,
		 *	u*和v*是色度。于1976年由国际照明委员会CIE 提出,由CIE XYZ空间经简单变换得到,具视觉统一性。类似的色
		 *	彩空间有CIELAB。对于一般的图像,u*和v*的取值范围为-100到+100,亮度为0到100。)转换。
		 *	例如,如果您有一个32位浮点图像直接从8位图像转换而没有任何缩放,则它将具有0..255的值范围,
		 *	而不是该函数假定的0..1。因此,在调用#cvtColor之前,您需要先按比例缩小图像:
		 *	img = 1./255;
		 *	cvtColor(img,img,COLOR_BGR2Luv);
		 *	如果将#cvtColor与8位图像一起使用,转换将丢失一些信息。对于许多应用程序来说,这不会引起注意,
		 *	但是建议在需要全部颜色范围的应用程序中使用32位图像,或者在进行操作之前先转换图像然后再转换回来。
		 *	如果转换添加了Alpha通道,则其值将设置为相应通道范围的最大值:CV_8U为255,CV_16U为65535,CV_32F为1。
		 *	@param src输入图像:8位无符号,16位无符号(CV_16UC ...)或单精度浮点数。
		 *	@param dst输出图像的大小和深度与src相同。
		 *	@param代码颜色空间转换代码。
		 *	通道是自动从src和代码派生的。  
		 */
		 /*	
		  * 下面附上第三个参数的详细解释
		  */
		Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2GRAY);
		
		int channels = image.channels();//获取图像通道数
		
		for (int i = 0, rlen = image.rows(); i < rlen; i++) {
			for (int j = 0, clen = image.cols(); j < clen; j++) {
				if (channels == 3) {//图片为3通道即平常的(B,G,R)
					System.out.println(i+","+j+"B:"+image.get(i, j)[0]);
					System.out.println(i+","+j+"G:"+image.get(i, j)[1]);
					System.out.println(i+","+j+"R:"+image.get(i, j)[2]);
				} else {//图片为单通道
					System.out.println(i+","+j+":"+image.get(i, j)[0]);
				}
			}
		}
		HighGui.imshow("image", image);
		HighGui.waitKey();
	}
}

将Alpha通道添加到RGB或BGR图像

COLOR_BGR2BGRA
COLOR_RGB2RGBA

从RGB或BGR图像中删除Alpha通道

COLOR_BGRA2BGR
COLOR_RGBA2RGB

在RGB和BGR颜色空间之间转换(有或没有alpha通道)

COLOR_BGR2RGBA
COLOR_RGB2BGRA
COLOR_RGBA2BGR
COLOR_BGRA2RGB
COLOR_BGR2RGB
COLOR_RGB2BGR
COLOR_BGRA2RGBA
COLOR_RGBA2BGRA

在RGB / BGR和灰度之间进行转换,进行颜色转换

COLOR_BGR2GRAY
COLOR_RGB2GRAY
COLOR_GRAY2BGR
COLOR_GRAY2RGB
COLOR_GRAY2BGRA
COLOR_GRAY2RGBA
COLOR_BGRA2GRAY
COLOR_RGBA2GRAY

在RGB / BGR和BGR565之间转换(16位图像)

COLOR_BGR2BGR565
COLOR_RGB2BGR565
COLOR_BGR5652BGR
COLOR_BGR5652RGB
COLOR_BGRA2BGR565
COLOR_RGBA2BGR565
COLOR_BGR5652BGRA
COLOR_BGR5652RGBA

在灰度到BGR565之间转换(16位图像)

COLOR_GRAY2BGR565
COLOR_BGR5652GRAY

在RGB / BGR和BGR555之间转换(16位图像)

COLOR_BGR2BGR555
COLOR_RGB2BGR555
COLOR_BGR5552BGR
COLOR_BGR5552RGB
COLOR_BGRA2BGR555
COLOR_RGBA2BGR555
COLOR_BGR5552BGRA
COLOR_BGR5552RGBA

在灰度和BGR555之间转换(16位图像)

COLOR_GRAY2BGR555
COLOR_BGR5552GRAY

将RGB / BGR转换为CIE XYZ,进行颜色转换

COLOR_BGR2XYZ
COLOR_RGB2XYZ
COLOR_XYZ2BGR
COLOR_XYZ2RGB

将RGB / BGR转换为亮度色度(aka YCC),颜色转换

COLOR_BGR2YCrCb
COLOR_RGB2YCrCb
COLOR_YCrCb2BGR
COLOR_YCrCb2RGB

将RGB / BGR转换为HSV(色相饱和度值),颜色转换

COLOR_BGR2HSV
COLOR_RGB2HSV

将RGB / BGR转换为CIE Lab,进行颜色转换

COLOR_BGR2Lab
COLOR_RGB2Lab

将RGB / BGR转换为CIE Luv,颜色转换

COLOR_BGR2Luv
COLOR_RGB2Luv

将RGB / BGR转换为HLS(色相饱和度),颜色转换

COLOR_BGR2HLS
COLOR_RGB2HLS

向后转换为RGB / BGR

COLOR_HSV2BGR
COLOR_HSV2RGB
COLOR_Lab2BGR
COLOR_Lab2RGB
COLOR_Luv2BGR
COLOR_Luv2RGB
COLOR_HLS2BGR
COLOR_HLS2RGB
COLOR_BGR2HSV_FULL
COLOR_RGB2HSV_FULL
COLOR_BGR2HLS_FULL
COLOR_RGB2HLS_FULL
COLOR_HSV2BGR_FULL
COLOR_HSV2RGB_FULL
COLOR_HLS2BGR_FULL
COLOR_HLS2RGB_FULL
COLOR_LBGR2Lab
COLOR_LRGB2Lab
COLOR_LBGR2Luv
COLOR_LRGB2Luv
COLOR_Lab2LBGR
COLOR_Lab2LRGB
COLOR_Luv2LBGR
COLOR_Luv2LRGB

在RGB / BGR和YUV之间转换

COLOR_BGR2YUV
COLOR_RGB2YUV
COLOR_YUV2BGR
COLOR_YUV2RGB

YUV 4:2:0系列转换为RGB。

COLOR_YUV2RGB_NV12
COLOR_YUV2BGR_NV12
COLOR_YUV2RGB_NV21
COLOR_YUV2BGR_NV21
COLOR_YUV420sp2RGB
COLOR_YUV420sp2BGR
COLOR_YUV2RGBA_NV12
COLOR_YUV2BGRA_NV12
COLOR_YUV2RGBA_NV21
COLOR_YUV2BGRA_NV21
COLOR_YUV420sp2RGBA
COLOR_YUV420sp2BGRA
COLOR_YUV2RGB_YV12
COLOR_YUV2BGR_YV12
COLOR_YUV2RGB_IYUV
COLOR_YUV2BGR_IYUV
COLOR_YUV2RGB_I420
COLOR_YUV2BGR_I420
COLOR_YUV420p2RGB
COLOR_YUV420p2BGR
COLOR_YUV2RGBA_YV12
COLOR_YUV2BGRA_YV12
COLOR_YUV2RGBA_IYUV
COLOR_YUV2BGRA_IYUV
COLOR_YUV2RGBA_I420
COLOR_YUV2BGRA_I420
COLOR_YUV420p2RGBA
COLOR_YUV420p2BGRA
COLOR_YUV2GRAY_420
COLOR_YUV2GRAY_NV21
COLOR_YUV2GRAY_NV12
COLOR_YUV2GRAY_YV12
COLOR_YUV2GRAY_IYUV
COLOR_YUV2GRAY_I420
COLOR_YUV420sp2GRAY
COLOR_YUV420p2GRAY

YUV 4:2:2系列转换为RGB。

COLOR_YUV2RGB_UYVY
COLOR_YUV2BGR_UYVY
COLOR_YUV2RGB_Y422
COLOR_YUV2BGR_Y422
COLOR_YUV2RGB_UYNV
COLOR_YUV2BGR_UYNV
COLOR_YUV2RGBA_UYVY
COLOR_YUV2BGRA_UYVY
COLOR_YUV2RGBA_Y422
COLOR_YUV2BGRA_Y422
COLOR_YUV2RGBA_UYNV
COLOR_YUV2BGRA_UYNV
COLOR_YUV2RGB_YUY2
COLOR_YUV2BGR_YUY2
COLOR_YUV2RGB_YVYU
COLOR_YUV2BGR_YVYU
COLOR_YUV2RGB_YUYV
COLOR_YUV2BGR_YUYV
COLOR_YUV2RGB_YUNV
COLOR_YUV2BGR_YUNV
COLOR_YUV2RGBA_YUY2
COLOR_YUV2BGRA_YUY2
COLOR_YUV2RGBA_YVYU
COLOR_YUV2BGRA_YVYU
COLOR_YUV2RGBA_YUYV
COLOR_YUV2BGRA_YUYV
COLOR_YUV2RGBA_YUNV
COLOR_YUV2BGRA_YUNV
COLOR_YUV2GRAY_UYVY
COLOR_YUV2GRAY_YUY2
COLOR_YUV2GRAY_Y422
COLOR_YUV2GRAY_UYNV
COLOR_YUV2GRAY_YVYU
COLOR_YUV2GRAY_YUYV
COLOR_YUV2GRAY_YUNV

字母预乘

COLOR_RGBA2mRGBA
COLOR_mRGBA2RGBA

RGB至YUV 4:2:0系列。

COLOR_RGB2YUV_I420
COLOR_BGR2YUV_I420
COLOR_RGB2YUV_IYUV
COLOR_BGR2YUV_IYUV
COLOR_RGBA2YUV_I420
COLOR_BGRA2YUV_I420
COLOR_RGBA2YUV_IYUV
COLOR_BGRA2YUV_IYUV
COLOR_RGB2YUV_YV12
COLOR_BGR2YUV_YV12
COLOR_RGBA2YUV_YV12
COLOR_BGRA2YUV_YV12

去马赛克。

COLOR_BayerBG2BGR
COLOR_BayerGB2BGR
COLOR_BayerRG2BGR
COLOR_BayerGR2BGR
COLOR_BayerBG2RGB
COLOR_BayerGB2RGB
COLOR_BayerRG2RGB
COLOR_BayerGR2RGB
COLOR_BayerBG2GRAY
COLOR_BayerGB2GRAY
COLOR_BayerRG2GRAY
COLOR_BayerGR2GRAY

使用可变数量的渐变去马赛克。

COLOR_BayerBG2BGR_VNG
COLOR_BayerGB2BGR_VNG
COLOR_BayerRG2BGR_VNG
COLOR_BayerGR2BGR_VNG
COLOR_BayerBG2RGB_VNG
COLOR_BayerGB2RGB_VNG
COLOR_BayerRG2RGB_VNG
COLOR_BayerGR2RGB_VNG

边缘感知的去马赛克。

COLOR_BayerBG2BGR_EA
COLOR_BayerGB2BGR_EA
COLOR_BayerRG2BGR_EA
COLOR_BayerGR2BGR_EA
COLOR_BayerBG2RGB_EA
COLOR_BayerGB2RGB_EA
COLOR_BayerRG2RGB_EA
COLOR_BayerGR2RGB_EA
COLOR_COLORCVT_MAX

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里藍天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值