用OpenCV自带的inpaint()演示

CV_EXPORTS_W void inpaint(
InputArray src,
InputArray inpaintMask,
OutputArray dst,
double inpaintRadius,
int flags
);
  • src 输入图像
  • inpaintMask 掩膜,和输入矩阵相同size的黑白矩阵。白色表示感兴趣区域。这里指需要修复的区域。
  • dst 输出图像
  • inpaintRadius 是渲染半径,一般用小半径3,大半径容易模糊。
  • flags 修复方法,有两种:INPAINT_NS 和 INPAINT_TELEA。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat src = imread("images/favorite/cat.jpg");
Mat dst; Rect rect0(624, 655, 400, 20);//这里的参数是我手动修改凑出来的 Mat mask = Mat::zeros(src.size(), CV_8UC1);
mask(rect0).setTo(255); inpaint(src, mask, dst, 3, INPAINT_NS); imshow("mask", mask);
imshow("src", src);
imshow("dst", dst); waitKey(0);
return 0;
}

画图程序

创建鼠标回调函数

CV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);
#include <opencv2/opencv.hpp>

using namespace cv;

Mat mask_board;
int width = 5;
int paint_or_wipe = 1; void draw_dot(int event, int x, int y, int flags, void *ustc)
{
Scalar color;
if(paint_or_wipe)
color = (255);
else
color = (0);
if(event == EVENT_LBUTTONDOWN)
rectangle(mask_board, Point(x-width/2, y-width/2), Point(x+width/2, y+width/2), color, -1);
if(event == EVENT_MOUSEMOVE and flags == EVENT_FLAG_LBUTTON)
rectangle(mask_board, Point(x-width/2, y-width/2), Point(x+width/2, y+width/2), color, -1);
} int main()
{
Mat src = imread("images/favorite/cat.jpg");
mask_board = Mat::zeros(src.size(), CV_8UC1); imshow("mask_board", mask_board);
setMouseCallback("mask_board", draw_dot);
int k = 1;
createTrackbar("paint_or_wipe", "mask_board", &k, 1); while (1)
{
paint_or_wipe = k; imshow("mask_board", mask_board); if(waitKey(1) == 'q')
break;
} return 0;
}

做一个去除水印小工具

利用OpenCV自带的highgui来做一个小应用,支持用鼠标划出水印位置,然后除水印。

#include <opencv2/opencv.hpp>

using namespace cv;

Mat mask_board;
const int width = 7;
int paint_or_wipe = 1;
int show = 1; void draw_dot(int event, int x, int y, int flags, void *ustc)
{
Scalar color;
if(paint_or_wipe)
color = (255);
else
color = (0);
if(event == EVENT_LBUTTONDOWN or (event == EVENT_MOUSEMOVE and flags == EVENT_FLAG_LBUTTON))
rectangle(mask_board, Point(x - width / 2, y - width / 2), Point(x + width / 2, y + width / 2), color, -1); } int main()
{
Mat src = imread("images/favorite/my.jpg");
Mat dst;
mask_board = Mat(src.size(), CV_8UC1, Scalar(0)); imshow("image", src);
setMouseCallback("image", draw_dot);
createTrackbar("paint_or_wipe", "image", &paint_or_wipe, 1);
createTrackbar("show", "image", &show, 1); while (1)
{
if(waitKey(1) == 'q')
break; inpaint(src, mask_board, dst, 3, INPAINT_NS);
if(!show)
bitwise_and(src, Scalar(0, 0, 0), dst, mask_board); imshow("image", dst);
} waitKey(0);
return 0;
}

(完)

S2.1 修复图像小程序(简单版)的更多相关文章

  1. 微信小程序横版日历,tab栏

    代码地址如下:http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  2. 微慕WordPress小程序增强版

    2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线.在过去的2年多的时间里,微信小程序领头,各大互联网平台也不甘落后,陆续推出自己的小程序.2018年7月4日,百度智能小程 ...

  3. 微信小程序简单封装图片上传组件

    微信小程序简单封装图片上传组件 希望自己 "day day up" -----小陶 我从哪里来 在写小程序的时候需要上传图片,个人觉得官方提供的 Uploader 组件不是太好用, ...

  4. 微信小程序简单入门1

    参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 1  创建项目 开发者工具安装完成后,打开并使用微信扫码登录.选择创建"项 ...

  5. 微信小程序简单入门理解

    简单的小程序示例结构: (一):理解小程序结构app.js,app.json,app.wxss ①app.js,app.json是小程序结构必要的部分,app.wxss可选择 ②app.js用于创建小 ...

  6. 微信小程序简单介绍 一

    一 组件及api网址: 组件 :https://developers.weixin.qq.com/miniprogram/dev/component/view.html api:https://dev ...

  7. 什么是微信小程序?简单介绍

    1.微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有色的使用体验. 2.手机端App的另外一种新的展现形式 3.无需下载过多占用手机内存的app,小程序直接打开 ...

  8. 发布微信小程序体验版

    小程序这么火,一直没有做过.因为公司有个业务需要做小程序就顺带学习了一把. 1)本次是采用<微信开发者工具 Stable v1.02.1904090>进行的开发: 2)前端使用的是微信官方 ...

  9. 微信小程序简单的数据表格及查询功能

    简介: 此项目是一个前后端分离的小demo, 开发工具:idea+微信小程序开发工具 前端:界面布局样式和js的跳转 后端:依靠SpringBoot的业务逻辑层 项目的码云地址: https://gi ...

随机推荐

  1. 作业二Wordcount

    1,github地址 https://github.com/dtneverdie/word-count 2,PSP表格 3,解题思路 先从理论上判断应该先将文件内的字符全部读入,然后根据分隔符来进行单 ...

  2. 第4章学习小结_串(BF&KMP算法)、数组(三元组)

    这一章学习之后,我想对串这个部分写一下我的总结体会. 串也有顺序和链式两种存储结构,但大多采用顺序存储结构比较方便.字符串定义可以用字符数组比如:char c[10];也可以用C++中定义一个字符串s ...

  3. 关于vue中如何配置echarts以及使用方法

    ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  4. docker部署redis及踩到的坑

    对docker很好奇,玩了一下,部署了一个redis,结果踩了很多坑 任务目的就是在docker中成功部署redis并保证数据持久化到本地,配置也使用本地配置 docker run -p : -v $ ...

  5. docker安装redis

    查询镜像 docker search redis 拉取镜像 docker pull redis 启动容器 docker run --name redis -p 6379:6379 -d --resta ...

  6. KVO实现原理

    KVO意为键值观察Key-Value-Observer,本质仍然是观察者模式. 观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是 ...

  7. php跨域问题记录

    记录跨域问题 一.问题 在控制层加了如下代码: header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN'] ); header('Ac ...

  8. LRU 实现缓存

    LRU:Least Recently used 最近最少使用 1.使用LinkedHashMap实现 inheritance实现方式 继承map类 可以使用Collections.synchroniz ...

  9. 定时任务框架Quartz-(一)Quartz入门与Demo搭建

    注:本文来源于:是Guava不是瓜娃  <定时任务框架Quartz-(一)Quartz入门与Demo搭建> 一.什么是Quartz 什么是Quartz? Quartz是OpenSympho ...

  10. UiAutomator2.0 - 与AccessibilityService的关联

    目录 一.Android中的 Accessibility 二.UiAutomator2.0 与 AccessibilityService 三.验证与 AccessibilityService的关联 A ...