Java OpenCV数字图像处理——颜色反转

【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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值