当前位置: 首页 > 编程日记 > 正文

OpenCV 【二十】给图像添加边界

目录

1原理

2 代码

3 运行结果


1原理

  1. 前一节我们学习了图像的卷积操作。一个很自然的问题是如何处理卷积边缘。当卷积点在图像边界时会发生什么,如何处理这个问题?

  2. 大多数用到卷积操作的OpenCV函数都是将给定图像拷贝到另一个轻微变大的图像中,然后自动填充图像边界(通过下面示例代码中的各种方式)。这样卷积操作就可以在边界像素安全执行了(填充边界在操作完成后会自动删除)。

  3. 本文档将会探讨填充图像边界的两种方法:

    1. BORDER_CONSTANT: 使用常数填充边界 (i.e. 黑色或者 0)

    2. BORDER_REPLICATE: 复制原图中最临近的行或者列。

  1. 本程序做什么?

    • 装载图像

    • 由用户决定使用哪种填充方式。有两个选项:

      1. 常数边界: 所有新增边界像素使用一个常数,程序每0.5秒会产生一个随机数更新该常数值。

      2. 复制边界: 复制原图像的边界像素。

      用户可以选择按 ‘c’ 键 (常数边界) 或者 ‘r’ 键 (复制边界)

    • 当用户按 ‘ESC’ 键,程序退出。

  2. 下面是本教程的源码, 你也可以从 这里 下载

2 代码

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
​
using namespace cv;
//src = imread("C:\\Users\\guoqi\\Desktop\\ch7\\4.jpg", 1);
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
​
using namespace cv;
​
/// 全局变量
Mat src, dst;
int top, bottom, left, right;
int borderType;
Scalar value;
char* window_name = "copyMakeBorder Demo";
RNG rng(12345);
​
/** @函数 main  */
int main(int argc, char** argv)
{
​int c;
​/// 装载图像src = imread("C:\\Users\\guoqi\\Desktop\\ch7\\4.jpg", 1);
​if (!src.data){return -1;printf(" No data entered, please enter the path to an image file \n");}
​/// 使用说明printf("\n \t copyMakeBorder Demo: \n");printf("\t -------------------- \n");printf(" ** Press 'c' to set the border to a random constant value \n");printf(" ** Press 'r' to set the border to be replicated \n");printf(" ** Press 'ESC' to exit the program \n");
​/// 创建显示窗口namedWindow(window_name, CV_WINDOW_AUTOSIZE);
​/// 初始化输入参数top = (int)(0.05*src.rows); bottom = (int)(0.05*src.rows);left = (int)(0.05*src.cols); right = (int)(0.05*src.cols);dst = src;
​imshow(window_name, dst);
​while (true){c = waitKey(500);
​if ((char)c == 27){break;}else if ((char)c == 'c'){borderType = BORDER_CONSTANT;}else if ((char)c == 'r'){borderType = BORDER_REPLICATE;}
​value = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));copyMakeBorder(src, dst, top, bottom, left, right, borderType, value);
​imshow(window_name, dst);}
​return 0;
}

3 运行结果

相关文章:

Linux账户安全管理--useradd、groupadd、passwd、chown、chmod工具

groupadd-g 设置组id号实例&#xff1a; groupadd tomcatgroupadd -g600 tomcat删除组用groupdelgroupdel tomcatuseradd-c comment 给新用户添加备注 -d home_dir 为主目录指定一个名字&#xff08;如果不想用登录名作为主目录名的话&#xff09; -e expire_date 用Y…

Rect 选择感兴趣区域

#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> // 全局变量源图像 cv::Mat srcImage; // 方法1 利用Rect选择区域(100, 180, 150, 50) void regionExtraction(int xRoi, int yRoi, int widthRoi, int…

paramiko的使用

1 import paramiko2 import sys3 4 5 user "root"6 pwd "123456"7 8 9 10 # 上传文件 11 def sftp_upload_file(server_path, local_path): 12 try: 13 t paramiko.Transport((ip, 22)) 14 t.connect(usernameuser, passwordpwd) …

【C++】多线程与并发【一】

文章目录part 0:多线程简介part 1:多线程构造它用于构造线程对象。参量part 2:多线程析构它破坏线程对象。part 3:多线程operator参量 Parameters返回值Data racespart 4:joinable 它返回线程ive对象是否可连接&#xff0c;则返回true&#xff0c;否则返回false。 表示的是否可…

鼠标按键获取感兴趣区域

#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <stdio.h> using namespace cv; using namespace std; // 全局变量图像源 cv::Mat srcImage; // 所选矩形区域 cv::Rect roiRect; …

git在不同操作系统下自动替换换行符

2019独角兽企业重金招聘Python工程师标准>>> 一天使用docker创建一个镜像执行报一个错 standard_init_linux.go:175: exec user process caused "no such file or directory"参考资料 http://blog.jobbole.com/46200/ http://neue.v2ex.com/t/309469 git …

关于jsp和eclipse服务器端的相关配置和JS的区别

今天配置了一番eclipse的服务器端&#xff0c;由此重新认识了web技术的皮毛&#xff1b; 话不多说&#xff0c;让我们开始&#xff1a; 一&#xff1a; 首先让我们了解一下js和jsp的技术之间的差别&#xff1a; 1&#xff09;js&#xff1a;https://zh.wikipedia.org/wiki/Java…

【C++】多线程与互斥锁【二】

文章目录1. 并发是什么1.1 并发与并行1.2 硬件并发与任务切换1.3 多线程并发与多进程并发2. 为什么使用并发2.1 为什么使用并发2.2 并发和多线程3. 并发需要注意的问题3.1 多线程中的数据竞争实例1&#xff1a;3.2 如何处理数据竞争&#xff1f;实例2&#xff1a;实例3&#xf…

用hosting.json配置ASP.NET Core站点的Hosting环境

通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境&#xff0c;最常用的就是 .UseUrls() 。 public class Program {public static void Main(string[] args){var host new WebHostBuilder().UseUrls("http://*:5000").UseKestrel().U…

鼠标按键获取感兴趣区域 2

#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <stdio.h> using namespace cv; using namespace std; // 全局变量图像源 cv::Mat srcImage; // 所选矩形区域 cv::Rect roiRect; …

偷看日历?9款 APP 涉嫌过度获取权限

最近网友已经看累了APP搞事的瓜&#xff0c;3月29日&#xff0c;“9款 APP 涉嫌过度获取权限”又上了热搜。 不久前上海消保委针对网购平台、旅游出行、生活服务等39款手机APP进行了涉及个人信息权限的评测&#xff0c;主要包括四个方面&#xff1a;App所使用的目标API级别、A…

【C++】多线程与条件变量【三】

文章目录1 条件变量是什么&#xff1f;实例1&#xff1a;2 条件变量本质&#xff1f;3 引入条件变量的原因&#xff1f;实例2&#xff1a;实例3&#xff1a;实例4&#xff1a;4 如何使用条件变量&#xff1f;4.1 std::condition_variable实例5&#xff1a;4.2 std::condition_v…

图像遍历反色处理,遍历多通道图片

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; // 下标M.at<float>(i,j) 方法1-1 cv::Mat inverseColor1(cv::Mat srcImage) {cv::Mat tempImage srcImage.clone();int row t…

【Treap】bzoj1588-HNOI2002营业额统计

一、题目 Description 营业额统计 Tiger最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger拿出了公司的账本&#xff0c;账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节…

推荐一款 Flutter Push 推送功能插件

又到了推荐好插件的时候了。开发 APP 避免不了使用「推送」功能。比如&#xff0c;新上架一个商品&#xff0c;或者最新的一条体育新闻&#xff0c;实时推送给用户。 比较了几家推送平台&#xff0c;貌似「极光」出了 Flutter 插件&#xff0c;所以就拿它试试手&#xff0c;顺便…

【C++】多线程与异步编程【四】

文章目录【C】多线程与异步编程【四】0.三问1.什么是异步编程&#xff1f;1.1同步与异步1.2 **阻塞与非阻塞**2、如何使用异步编程2.1 使用全局变量与条件变量传递结果实例1&#xff1a;2.2 使用promise与future传递结果实例2实例32.3使用packaged_task与future传递结果实例42.…

[LintCode] Maximum Subarray 最大子数组

Given an array of integers, find a contiguous subarray which has the largest sum. Notice The subarray should contain at least one number. Have you met this question in a real interview? YesExample Given the array [−2,2,−3,4,−1,2,1,−5,3], the contiguo…

图像补运算:反色处理

cv::Mat inverseColor1(cv::Mat srcImage) {cv::Mat tempImage srcImage.clone();int row tempImage.rows;int col tempImage.cols;// 对各个像素点遍历进行取反for (int i 0; i < row; i){for (int j 0; j < col; j){// 分别对各个通道进行反色处理tempImage.at<…

2018-2019-2 网络对抗技术 20165239Exp3 免杀原理与实践

2018-2019-2 网络对抗技术 20165239 Exp3 免杀原理与实践 win10 ip地址 192.168.18.1 fenix ip地址为 192.168.18.128 &#xff08;1&#xff09;杀软是如何检测出恶意代码的&#xff1f; •根据计算机病毒课程知道了每个病毒都有其对应的特征码&#xff0c;杀软是根据这些特征…

【C++】多线程与原子操作和无锁编程【五】

【C】多线程与原子操作和无锁编程【五】 1、何为原子操作 前面介绍了多线程间是通过互斥锁与条件变量来保证共享数据的同步的&#xff0c;互斥锁主要是针对过程加锁来实现对共享资源的排他性访问。很多时候&#xff0c;对共享资源的访问主要是对某一数据结构的读写操作&#…

jquery中ajax的dataType属性包括哪几项

参考ajax api文档&#xff1a;http://www.w3school.com.cn/jquery/ajax_ajax.asp dataType类型&#xff1a;String预期服务器返回的数据类型。如果不指定&#xff0c;jQuery 将自动根据 HTTP 包 MIME 信息来智能判断&#xff0c;比如 XML MIME 类型就被识别为 XML。在 1.4 中&a…

图像补运算:ptr反色处理

cv::Mat inverseColor3(cv::Mat srcImage) {cv::Mat tempImage srcImage.clone();int row tempImage.rows;// 将3通道转换为单通道int nStep tempImage.cols * tempImage.channels();for(int i 0; i < row; i) {// 取源图像的指针const uchar* pSrcData srcImage.ptr&l…

Android 在运行时请求权限

2019独角兽企业重金招聘Python工程师标准>>> 从 Android 6.0&#xff08;API 级别 23&#xff09;开始&#xff0c;用户开始在应用运行时向其授予权限&#xff0c;而不是在应用安装时授予。此方法可以简化应用安装过程&#xff0c;因为用户在安装或更新应用时不需要…

Markdown解决图片存储问题

文章目录Markdown1.前言2.图片引用方式方式1&#xff1a;可以任意比例放缩图片方式2&#xff1a;原比例引用图片3.推荐公式编辑器4.此外简单介绍下Markdown的一种轻量化工具Typora的使用方法。Markdown 1.前言 相信大家在使用Typora&#xff0c;经常会遇到图片编辑的问题&…

jenkins添加git源码目录时报Error performing command错误

简介 这是我在构建一个自动化部署项目中遇到的一个异常 解决步骤&#xff1a; 1、进入的jenkins的home目录&#xff0c;执行下面命令生成公钥和私钥 [rootjacky .jenkins]# ssh-keygen -t dsa 2、查看生成的公钥 [rootjacky .ssh]# cat /root/.ssh/id_dsa.pub ssh-dss AAAAB3Nz…

图像补运算:MatIterator_迭代器反色处理

#include <opencv2/opencv.hpp>#include <opencv2/video/background_segm.hpp>// 注意srcImage为3通道的彩色图片 cv::Mat inverseColor4(cv::Mat &srcImage) {cv::Mat tempImage srcImage.clone();// 初始化源图像迭代器 cv::MatConstIterator_<cv::Vec3…

浅谈同一家公司多个系统,共用登录用户名和密码

主要解决系统使用的加密方式不一致的问题&#xff0c; 比如几年前的系统A&#xff0c; 某某牵头无中生有的系统B 原先A用的php语言开发&#xff0c;比如叫做tap&#xff0c;是国外用来做项目管理的一款BS平台&#xff0c;&#xff08;和国内发禅道类似&#xff0c;省略***&…

Eigen/Matlab 使用小结

文章目录[Eigen Matlab使用小结](https://www.cnblogs.com/rainbow70626/p/8819119.html)Eigen初始化0.[官网资料](http://eigen.tuxfamily.org/index.php?titleMain_Page)1. Eigen Matlab矩阵定义2. Eigen Matlab基础使用3. Eigen Matlab特殊矩阵生成4. Eigen Matlab矩阵分块…

GitHUb 代码提交遇到的问题以及解决办法

git 添加代码出现以下错误&#xff1a; fatal: Unable to create F:/wamp/www/ThinkPhpStudy/.git/index.lock: File exists. If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git …

isContinuous 反色处理

cv::Mat inverseColor5(cv::Mat srcImage) {int row srcImage.rows;int col srcImage.cols;cv::Mat tempImage srcImage.clone();// 判断是否是连续图像&#xff0c;即是否有像素填充if( srcImage.isContinuous() && tempImage.isContinuous() ){row 1;// 按照行展…