S2.1 修复图像小程序(简单版)

用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 修复图像小程序(简单版)的更多相关文章
- 微信小程序横版日历,tab栏
代码地址如下:http://www.demodashi.com/demo/14243.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微慕WordPress小程序增强版
2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线.在过去的2年多的时间里,微信小程序领头,各大互联网平台也不甘落后,陆续推出自己的小程序.2018年7月4日,百度智能小程 ...
- 微信小程序简单封装图片上传组件
微信小程序简单封装图片上传组件 希望自己 "day day up" -----小陶 我从哪里来 在写小程序的时候需要上传图片,个人觉得官方提供的 Uploader 组件不是太好用, ...
- 微信小程序简单入门1
参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 1 创建项目 开发者工具安装完成后,打开并使用微信扫码登录.选择创建"项 ...
- 微信小程序简单入门理解
简单的小程序示例结构: (一):理解小程序结构app.js,app.json,app.wxss ①app.js,app.json是小程序结构必要的部分,app.wxss可选择 ②app.js用于创建小 ...
- 微信小程序简单介绍 一
一 组件及api网址: 组件 :https://developers.weixin.qq.com/miniprogram/dev/component/view.html api:https://dev ...
- 什么是微信小程序?简单介绍
1.微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有色的使用体验. 2.手机端App的另外一种新的展现形式 3.无需下载过多占用手机内存的app,小程序直接打开 ...
- 发布微信小程序体验版
小程序这么火,一直没有做过.因为公司有个业务需要做小程序就顺带学习了一把. 1)本次是采用<微信开发者工具 Stable v1.02.1904090>进行的开发: 2)前端使用的是微信官方 ...
- 微信小程序简单的数据表格及查询功能
简介: 此项目是一个前后端分离的小demo, 开发工具:idea+微信小程序开发工具 前端:界面布局样式和js的跳转 后端:依靠SpringBoot的业务逻辑层 项目的码云地址: https://gi ...
随机推荐
- 作业二Wordcount
1,github地址 https://github.com/dtneverdie/word-count 2,PSP表格 3,解题思路 先从理论上判断应该先将文件内的字符全部读入,然后根据分隔符来进行单 ...
- 第4章学习小结_串(BF&KMP算法)、数组(三元组)
这一章学习之后,我想对串这个部分写一下我的总结体会. 串也有顺序和链式两种存储结构,但大多采用顺序存储结构比较方便.字符串定义可以用字符数组比如:char c[10];也可以用C++中定义一个字符串s ...
- 关于vue中如何配置echarts以及使用方法
ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...
- docker部署redis及踩到的坑
对docker很好奇,玩了一下,部署了一个redis,结果踩了很多坑 任务目的就是在docker中成功部署redis并保证数据持久化到本地,配置也使用本地配置 docker run -p : -v $ ...
- docker安装redis
查询镜像 docker search redis 拉取镜像 docker pull redis 启动容器 docker run --name redis -p 6379:6379 -d --resta ...
- KVO实现原理
KVO意为键值观察Key-Value-Observer,本质仍然是观察者模式. 观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是 ...
- php跨域问题记录
记录跨域问题 一.问题 在控制层加了如下代码: header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN'] ); header('Ac ...
- LRU 实现缓存
LRU:Least Recently used 最近最少使用 1.使用LinkedHashMap实现 inheritance实现方式 继承map类 可以使用Collections.synchroniz ...
- 定时任务框架Quartz-(一)Quartz入门与Demo搭建
注:本文来源于:是Guava不是瓜娃 <定时任务框架Quartz-(一)Quartz入门与Demo搭建> 一.什么是Quartz 什么是Quartz? Quartz是OpenSympho ...
- UiAutomator2.0 - 与AccessibilityService的关联
目录 一.Android中的 Accessibility 二.UiAutomator2.0 与 AccessibilityService 三.验证与 AccessibilityService的关联 A ...