Java OpenCV 图像处理32.4 视频分析和对象跟踪 切换背景

方法 含义 解释
bitwise_and “与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作 1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0
bitwise_or “或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“或”操作 1 | 1 = 1,1 | 0 = 0,0 | 1 = 0,0 | 0 = 0
bitwise_xor “异或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“异或”操作 1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0
bitwise_not “非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作 1 = 0, 0 = 1

1 读取原图片
2 获取原图片的mask
3 获取原图片需要获取的ROI
4 获取新背景的mask
5 融合 3,5

package com.xu.opencv;

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

/**
 * @Title: Image.java
 * @Description: OpenCV-4.0.0 测试文件
 * @Package com.xu.Image
 * @author: hyacinth
 * @date: 2022年1月19日14点43分
 * @version: V-1.0.0
 * @Copyright: 2019 hyacinth
 */
public class Image {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        ROI();
    }

    public static void ROI() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\1.png", Imgcodecs.IMREAD_ANYCOLOR);
        // 获取 mask
        Mat mask = new Mat();
        Core.inRange(src, new Scalar(235, 235, 235), new Scalar(255, 255, 255), mask);// B, G, R
        // 获取原图中的ROI
        Mat dst = new Mat();
        Core.bitwise_not(mask, mask);
        Core.bitwise_and(src, src, dst, mask);
        // 获取 新背景的 mask
        Mat img = new Mat();
        Core.bitwise_not(mask, mask);
        Mat blue = new Mat(src.size(), src.type(), new Scalar(255, 0, 0));
        Core.bitwise_or(dst, blue, img, mask);
        // 背景和ROI融合
        Mat mat = new Mat();
        Core.add(img, dst, mat);
        HighGui.imshow("新背景", mat);
        HighGui.waitKey();
        HighGui.destroyAllWindows();
    }

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐