自适应h5网站模板wordpress wordcloud
news/
2025/10/4 19:19:19/
文章来源:
自适应h5网站模板,wordpress wordcloud,企业建设网站软件,北京网站建设公司完美湖南岚鸿首 选返回:OpenCV系列文章目录#xff08;持续更新中......#xff09;
上一篇利用OpenCV4.9制作自己的线性滤波器#xff01;
下一篇 :OpenCV系列文章目录#xff08;持续更新中......#xff09; 目标
在本教程中#xff0c;您将学习如何#xff1a;
使用 OpenCV 函数 … 返回:OpenCV系列文章目录持续更新中......
上一篇利用OpenCV4.9制作自己的线性滤波器
下一篇 :OpenCV系列文章目录持续更新中...... 目标
在本教程中您将学习如何
使用 OpenCV 函数 copyMakeBorder() 设置边框图像的额外填充。
理论
注意
下面的解释属于 Bradski 和 Kaehler 的 Learning OpenCV 一书。
在之前的教程中我们学习了使用卷积对图像进行操作。自然而然地出现的一个问题是如何处理边界。如果被评估的点位于图像的边缘我们如何对它们进行卷积大多数 OpenCV 函数所做的是将给定的图像复制到另一个稍大的图像上然后自动填充边界通过下面示例代码中解释的任何方法。这样卷积可以在所需的像素上毫无问题地执行操作完成后会剪切额外的填充。 在本教程中我们将简要探讨为图像定义额外填充边框的两种方法 BORDER_CONSTANT用常量值填充图像即黑色或0BORDER_REPLICATE原稿边缘的行或列将复制到额外的边框。这将在“代码”部分中更清楚地看到。
这个程序是做什么的 加载图像 让用户选择在输入图像中使用哪种填充。有两种选择 常量值边框为整个边框应用常量值的填充。此值将每 0.5 秒随机更新一次。复制的边框边框将从原始图像边缘的像素值复制。用户通过按“c”常量或“r”复制来选择任一选项 当用户按下“ESC”时程序完成
C代码
教程代码如下所示。 您也可以从这里下载 #include opencv2/imgproc.hpp
#include opencv2/imgcodecs.hpp
#include opencv2/highgui.hppusing namespace cv;// Declare the variables
Mat src, dst;
int top, bottom, left, right;
int borderType BORDER_CONSTANT;
const char* window_name copyMakeBorder Demo;
RNG rng(12345);int main( int argc, char** argv )
{const char* imageName argc 2 ? argv[1] : lena.jpg;// Loads an imagesrc imread( samples::findFile( imageName ), IMREAD_COLOR ); // Load an image// Check if image is loaded fineif( src.empty()) {printf( Error opening image\n);printf( Program Arguments: [image_name -- default lena.jpg] \n);return -1;}// Brief how-to for this programprintf( \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, WINDOW_AUTOSIZE );// Initialize arguments for the filtertop (int) (0.05*src.rows); bottom top;left (int) (0.05*src.cols); right left;for(;;){Scalar value( 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 );char c (char)waitKey(500);if( c 27 ){ break; }else if( c c ){ borderType BORDER_CONSTANT; }else if( c r ){ borderType BORDER_REPLICATE; }}return 0;
}
解释 声明变量
首先我们声明将要使用的变量
// Declare the variables
Mat src, dst;
int top, bottom, left, right;
int borderType BORDER_CONSTANT;
const char* window_name copyMakeBorder Demo;
RNG rng(12345);
特别值得一提的是变量 rng它是一个随机数生成器。我们用它来生成随机边框颜色我们很快就会看到。
加载图像
像往常一样我们加载源图像 src const char* imageName argc 2 ? argv[1] : lena.jpg;// Loads an imagesrc imread( samples::findFile( imageName ), IMREAD_COLOR ); // Load an image// Check if image is loaded fineif( src.empty()) {printf( Error opening image\n);printf( Program Arguments: [image_name -- default lena.jpg] \n);return -1;} 创建窗口
在简要介绍了如何使用该程序之后我们创建了一个窗口 // Initialize arguments for the filtertop (int) (0.05*src.rows); bottom top;left (int) (0.05*src.cols); right left;
循环 程序在无限循环中运行而未按下 ESC 键。如果用户按“c”或“r”则 borderType 变量将分别取值 BORDER_CONSTANT 或 BORDER_REPLICATE char c (char)waitKey(500);if( c 27 ){ break; }else if( c c ){ borderType BORDER_CONSTANT; }else if( c r ){ borderType BORDER_REPLICATE; } 随机颜色
在每次迭代中0.5 秒后随机边框颜色值都会更新...... Scalar value( rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255) );
此值是在 [0,255] 范围内随机选择的三个数字的集合。
在图像周围形成边框
最后我们调用函数 copyMakeBorder()来应用相应的填充
copyMakeBorder( src, dst, top, bottom, left, right, borderType, value );
参数是 src源图片dst目标图像上、下、左、右图像两侧边框的长度以像素为单位。我们将它们定义为图像原始大小的 5%。borderType定义应用的边框类型。在此示例中它可以是常量或复制的。value如果 borderType 为 BORDER_CONSTANT则这是用于填充边框像素的值。 显示结果
我们在之前创建的图像中显示输出图像 imshow( window_name, dst ); 结果 编译上面的代码后您可以执行它并给出图像的路径作为参数。结果应为 默认情况下它以设置为 BORDER_CONSTANT 的边框开头。因此将显示一系列随机彩色边框。如果按“r”边框将成为边缘像素的复制品。如果按“c”随机彩色边框将再次出现如果按“ESC”程序将退出。下面的一些屏幕截图显示了边框如何改变颜色以及BORDER_REPLICATE选项的外观 参考文献
1、《Adding borders to your images》----Ana Huamán
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927466.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!