当前位置:网站首页>【opencv450-samples】inpaint 使用区域邻域恢复图像中的选定区域
【opencv450-samples】inpaint 使用区域邻域恢复图像中的选定区域
2022-06-25 21:57:00 【十年一梦实验室】

左侧为修复后的 右侧为源图像
源码:
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/photo.hpp"
#include <iostream>
using namespace cv;
using namespace std;
static void help(char** argv)
{
cout << "\nCool inpainging demo. Inpainting repairs damage to images by floodfilling the damage \n"
<< "with surrounding image areas.\n"
"Using OpenCV version %s\n" << CV_VERSION << "\n"
"Usage:\n" << argv[0] << " [image_name -- Default fruits.jpg]\n" << endl;
cout << "Hot keys: \n"
"\tESC - quit the program\n"
"\tr - restore the original image\n"
"\ti or SPACE - run inpainting algorithm\n"
"\t\t(before running it, paint something on the image)\n" << endl;
}
Mat img, inpaintMask;
Point prevPt(-1, -1);
static void onMouse(int event, int x, int y, int flags, void*)
{
if (event == EVENT_LBUTTONUP || !(flags & EVENT_FLAG_LBUTTON))//非左键按下 左键抬起
prevPt = Point(-1, -1);//重置上一点
else if (event == EVENT_LBUTTONDOWN) //左键第一次按下
prevPt = Point(x, y);//上一点
else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON))//左键按下 鼠标移动
{
Point pt(x, y);//当前点
if (prevPt.x < 0)
prevPt = pt;//上一点
line(inpaintMask, prevPt, pt, Scalar::all(255), 5, 8, 0);//绘制修复区域,非零像素
line(img, prevPt, pt, Scalar::all(255), 5, 8, 0);//在原图上绘制
prevPt = pt;//更新上一点
imshow("image", img);
}
}
int main(int argc, char** argv)
{
cv::CommandLineParser parser(argc, argv, "{@image|fruits.jpg|}");
help(argv);
//加载图像
string filename = samples::findFile(parser.get<string>("@image"));
Mat img0 = imread(filename, IMREAD_COLOR);
if (img0.empty())
{
cout << "Couldn't open the image " << filename << ". Usage: inpaint <image_name>\n" << endl;
return 0;
}
namedWindow("image", WINDOW_AUTOSIZE);
img = img0.clone();
inpaintMask = Mat::zeros(img.size(), CV_8U);//修复蒙版
imshow("image", img);
setMouseCallback("image", onMouse, NULL);//鼠标回调
for (;;)
{
char c = (char)waitKey();
if (c == 27)
break;
if (c == 'r')
{
inpaintMask = Scalar::all(0);
img0.copyTo(img);
imshow("image", img);
}
if (c == 'i' || c == ' ')
{
Mat inpainted;
/** @brief 使用区域邻域恢复图像中的选定区域。
@param src 输入 8 位、16 位无符号或 32 位浮点 1 通道或 8 位 3 通道图像。
@param inpaintMask 修复蒙版,8 位 1 通道图像。非零像素表示需要修复的区域。
@param dst 输出与 src 大小和类型相同的图像。
@param inpaintRadius 算法考虑的每个修复点的圆形邻域的半径。
@param 标记可能是 cv::INPAINT_NS 或 cv::INPAINT_TELEA 的修复方法
该函数从区域边界附近的像素重建所选图像区域。该功能可用于去除扫描照片上的灰尘和划痕,或去除静止图像或视频中不需要的物体。有关详细信息,请参阅 <http://en.wikipedia.org/wiki/Inpainting>。
@笔记
- 使用修复技术的示例可以在 opencv_source_code/samples/cpp/inpaint.cpp 找到
- (Python) 使用修复技术的示例可以在 opencv_source_code/samples/python/inpaint.py 找到
*/
inpaint(img, inpaintMask, inpainted, 3, INPAINT_TELEA);
imshow("inpainted image", inpainted);
}
}
return 0;
}
边栏推荐
- Common MySQL database functions and queries
- App test points
- PDM fur
- Unity technical manual - particle foundation main module attributes - upper
- What are the channels for Internet advertising to gain customers?
- . SQL database import error: / *! 40101 SET @OLD_ COLLATION_ [email protected]@COLLATION_ CONNECTION */
- MySQL数据库常用函数和查询
- 腾讯《和平精英》新版本将至:新增账号安全保护系统,游戏内违规行为检测升级
- Unity技术手册 - 粒子基础主模块属性-上
- Huawei cloud SRE deterministic operation and maintenance special issue (the first issue)
猜你喜欢

Three layer architecture + routing experiment

ES6 const constants and array deconstruction

2022爱分析· IT运维厂商全景报告

ES6 -- formal parameter setting initial value, extension operator, iterator, and generating function

Oracle - 基本入门

Set up your own website (15)

Fastjson反序列化随机性失败

Another breakthrough! Alibaba cloud enters the Gartner cloud AI developer service Challenger quadrant

What aspects should we start with in the feasibility analysis of dry goods?

2022-2028 global open source cloud storage industry research and trend analysis report
随机推荐
腾讯《和平精英》新版本将至:新增账号安全保护系统,游戏内违规行为检测升级
PDM fur
APP-新功能上线
Mysql database index
1281_FreeRTOS_vTaskDelayUntil实现分析
百度:2022年十大热度攀升专业出炉,第一名无悬念!
2. What is the geometric meaning of a vector multiplying its transpose?
Unity technical manual - getKey and getaxis and getbutton
[eosio] eos/wax signature error is_ Canonical (c): signature is not canonical
ES6 - numerical extension and object extension
Fastjson deserialization randomness failed
oracle -- 表操作
Core points of assembly language
Set up your own website (15)
ORACLE - 数据查询
再突破!阿里云进入Gartner云AI开发者服务挑战者象限
Oracle - 基本入门
多台云服务器的 Kubernetes 集群搭建
NLP pre training model-2018:bert dictionary
Exclusive or operator simple logic operation a^=b