zoukankan      html  css  js  c++  java
  • opencv —— inpaint 图像修补、去除指定区域物体

    实现图像修补、物体去除:inpaint 函数

    void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags);

    • src,输入图像,即源图像,填 Mat 类对象即可。但需是 8 位单通道或三通道图像。
    • inpaintMask,修复掩膜,为 8 位单通道图像。其中非零像素为需要修补的区域。
    • dst,输出图像,需要和源图像有相同的尺寸和类型。
    • inpaintRadius,圆形邻域半径。
    • flags,修补方法的标识符,两种选择:
    标识符 说明
    INPAINT_TELEA 基于 Navier-Stokes 方程的方法
    INPAINT_NS Alexandru Telea 方法

    代码示例:

    //该程序功能为:消除鼠标选择的矩形区域内的物体
    #include<opencv.hpp>
    #include<iostream>
    using namespace std;
    using namespace cv;
    Mat src, back, dst;
    Point pre, now;
    bool draw = false;
    RNG rngs = { 12345 };
    Scalar colors;
    void on_mouse(int event, int x, int y, int flags, void *param) {//鼠标操作响应函数
        switch (event){
        case EVENT_LBUTTONDOWN://按下左键
            draw = true;
            pre = Point(x, y);
            break;
        case EVENT_MOUSEMOVE://鼠标移动
            if (draw) {
                Mat tem = dst.clone();
                now = Point(x, y);
                colors = Scalar(rngs.uniform(0, 255), rngs.uniform(0, 255), rngs.uniform(0, 255));
                rectangle(tem, pre, now, colors);
                imshow("dst", tem);
            }
            break;
        case EVENT_LBUTTONUP://左键抬起
            draw = false;
            rectangle(back, pre, now, Scalar(255), -1);//在 修复掩膜 图像中绘制选择区域
            inpaint(dst, back, dst, 3, INPAINT_TELEA);//修复图像
            imshow("dst", dst);
            break;
        }
    }
    int main() {
        src = imread("C:/Users/齐明洋/Desktop/示例图片/1.jpg");
        imshow("src", src);
    
        namedWindow("dst");
        dst = src.clone();
        imshow("dst", dst);
        back = Mat::zeros(src.size(), CV_8UC1);//修复掩膜
        setMouseCallback("dst", on_mouse);//https://www.cnblogs.com/bjxqmy/p/11914601.html
        
        waitKey(0);
    }

    效果演示:

  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/12372136.html
Copyright © 2011-2022 走看看