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