OpenCV及概念
图像通道
在RGB色彩模式下,指单独的红色、绿色、蓝色部分,也就是说,一幅完整的图像,是由红色绿色蓝色三个通道组成的,他们共同作用产生了完整的图像。
图像像素
像素分为:数码像素与屏幕像素(或者叫物理像素,)有实实在在的物理尺寸。像素越大,分辨率越高,照片越清晰,可输出的照片尺寸也可以越大。
分辨率,又称解析度、解像度,可以细分为显示分辨率、图像分辨率、打印分辨率和扫描分辨率等。分辨率决定了位图图像细节的精细程度。
一般地,像素等于分辨率乘上尺寸,像素越高尺寸越小,图片分辨率也就越高,图像的分辨率越高看起来也越清晰。
OpenCV基本操作
1、OpenCV进行图像的读写,2、OpenCV在图像上绘制几何图像,3、OpenCV在图像添加文字、4. OpenCV获取像素值并进行修改。
上一节:计算机视觉,图像处理,OpenCV,跨平台视觉和机器学习的软件库
原图
代码案例
package com.w; import org.o.*; import org.o; import org.o; import org.o; public class OpenCVTest01 { static { // 保证先执行该语句,用于加载库 Sy); } /** * OpenCV进行图像的读写 */ public static void readAndWrite() { // 读入 Mat source = Imgcodecs.imread("D:\\demo.jpg"); // 读取图像到矩阵中 if ()) { return; } Sy()); // 3 Sy()); Sy()); // 写出 Imgcodecs.imwrite("D:\\demo2.jpg", source); } /** * OpenCV在图像上绘制几何图像 */ public static void drawForGeometric() { // 读入 Mat source = Imgcodecs.imread("D:\\demo2.jpg"); try { //画线,在图像中,从(50,50)坐标到(200,50),颜色为红色 Img(source, new Point(50, 50), new Point(1200, 500), new Scalar(255, 0, 0)); // 画矩形 Img(source, new Point(10, 10), new Point(1390, 490), new Scalar(0, 100, 255), 5); // 画圆 Img(source, new Point(500, 500), 270, new Scalar(255, 0, 255), 2); //输出图像 Imgcodecs.imwrite("D:\\demo3.jpg", source); } catch (Exception e) { e.printStackTrace(); } } /** * OpenCV在图像添加文字 */ public static void drawForString() { // 读入 Mat source = Imgcodecs.imread("D:\\demo3.jpg"); try { // 字体 Img(source, "ABCDEFG", new Point(100, 150), 3, 3.0, new Scalar(255, 0, 0)); // 字体 Img(source, "IT小奋斗", new Point(1700, 150), 5, 1.0, new Scalar(0, 255, 255)); //输出图像 Imgcodecs.imwrite("D:\\demo4.jpg", source); } catch (Exception e) { e.printStackTrace(); } } /** * OpenCV获取像素值并进行修改 */ public static void getPixelImage() { Mat source = Imgcodecs.imread("D:\\demo4.jpg"); Mat target = new Ma(), ()); //获取图像通道数 int channels = (); //用于存放像素点 double[] pixel = new double[3]; for (int i = 0, rlen = (); i < rlen; i++) { for (int j = 0, clen = (); j < clen; j++) { if (channels == 3) {//图片为3通道即平常的(B,G,R) pixel = (i, j).clone(); pixel[0] = 255 - pixel[0];//B pixel[1] = 255 - pixel[1];//G pixel[2] = 255 - pixel[2];//R (i, j, pixel); } else { //图片为单通道 (i, j, (i, j).clone()); } } } Img(source, target, new Size(() / 2, () / 2)); Hig("图片测试", target); Hig(0); //输出图像 Imgcodecs.imwrite("D:\\demo5.jpg", target); } /** * OpenCV获取像素值并进行修改 */ public static void getPixelImage2() { Mat source = Imgcodecs.imread("D:\\demo4.jpg"); Mat target = new Ma(), ()); //用于存放像素点 double[] pixel = new double[3]; for (int i = 0 ,row = (int) ().height; i < row; i++) { for (int j = 0,col = (int) ().width; j < col; j++) { pixel = (i, j).clone(); pixel[0] = 255 - pixel[0];//B pixel[1] = 255 - pixel[1];//G pixel[2] = 255 - pixel[2];//R (i, j, pixel); } } Hig("图片测试", target); Hig(0); //输出图像 Imgcodecs.imwrite("D:\\demo6.jpg", target); } public static void main(String[] args) { readAndWrite(); drawForGeometric(); drawForString(); getPixelImage2(); } }
输出效果1:
输出效果2: