【OpenCV】颜色反转
文章目录
颜色反转为两种:1、灰度图像颜色反转;2、彩色图像颜色反转
1、灰度图像颜色反转
package com.zhou.opencv.example;
import com.zhou.opencv.example.common.ListDisplayPanel;
import com.zhou.opencv.example.utils.BufferImageUtil;
import com.zhou.opencv.example.utils.ShowImages;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.io.IOException;
/**
* 颜色反转
*/
public class OpencvGrayInvImage {
private static final String imagePath = "image/cat.jpg";
public static void main(String[] args) throws Exception {
//取消热部署,防止opencv加载报错,没有热部署可忽略
System.setProperty("spring.devtools.restart.enabled", "false");
//加载绝对路径下的dll
System.load("E:\\workspace\\opencv\\lib\\opencv_java455.dll");
grayInvImage(imagePath);
}
/**
* 灰度反转
*
* @param filePath
* @throws IOException
*/
public static void grayInvImage(String filePath) throws IOException {
ListDisplayPanel gui = new ListDisplayPanel();
Mat src = Imgcodecs.imread(filePath, Imgcodecs.IMREAD_COLOR);
gui.addImage("原图", BufferImageUtil.mat2BufferedImage(src));
//检测图像是否加载成功
if (src.empty()) {
System.out.println("not find the image");
return;
}
//灰度;三通道RGB转为单通道全局灰度
Mat gray = new Mat(src.size(), CvType.CV_8UC1);
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
gui.addImage("灰度", BufferImageUtil.mat2BufferedImage(gray));
Mat dst = grayInverted(gray);
gui.addImage("灰度反转", BufferImageUtil.mat2BufferedImage(dst));
ShowImages.showWindow(gui, "颜色反转", true);
}
/**
* 灰度反转
*
* @param src
*/
public static Mat grayInverted(Mat src) {
Mat dst = new Mat(src.size(), CvType.CV_8UC1);
dst.setTo(new Scalar(255));
for (int row = 0; row < src.rows(); row++) {
for (int col = 0; col < src.cols(); col++) {
double[] colors = src.get(row, col);
dst.put(row, col, 255 - colors[0]);
}
}
return dst;
}
}
2、彩色图片颜色反转
package com.zhou.opencv.example;
import com.zhou.opencv.example.common.ListDisplayPanel;
import com.zhou.opencv.example.utils.BufferImageUtil;
import com.zhou.opencv.example.utils.ShowImages;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.io.IOException;
/**
* 颜色反转
*/
public class OpencvGrayInvImage {
private static final String imagePath = "image/cat.jpg";
public static void main(String[] args) throws Exception {
//取消热部署,防止opencv加载报错,没有热部署可忽略
System.setProperty("spring.devtools.restart.enabled", "false");
//加载绝对路径下的dll
System.load("E:\\workspace\\opencv\\lib\\opencv_java455.dll");
grayInvImage(imagePath);
}
/**
* 彩色反转
*
* @param filePath
* @throws IOException
*/
public static void grayInvImage(String filePath) throws IOException {
ListDisplayPanel gui = new ListDisplayPanel();
Mat src = Imgcodecs.imread(filePath, Imgcodecs.IMREAD_COLOR);
gui.addImage("原图", BufferImageUtil.mat2BufferedImage(src));
//检测图像是否加载成功
if (src.empty()) {
System.out.println("not find the image");
return;
}
//彩色反转
Mat grayInverted = new Mat(src.size(), CvType.CV_8UC3);
Core.bitwise_not(src, grayInverted);
gui.addImage("彩色反转", BufferImageUtil.mat2BufferedImage(grayInverted));
ShowImages.showWindow(gui, "颜色反转", true);
}
}
代码地址:Java-opencv