博客
关于我
opencv15-边缘处理
阅读量:791 次
发布时间:2023-02-23

本文共 3026 字,大约阅读时间需要 10 分钟。

OpenCV基础操作示例:图像边界处理

本文将展示如何利用OpenCV图像处理库对图像边界进行处理的示例代码。通过代码解析和实际操作,读者可以快速掌握OpenCV的基本操作。

代码解析

#include 
#include
#include
#include
using namespace std;using namespace cv;int main(){ Mat src = imread("E:\\vs2015\\opencvstudy\\1.jpg", 1); if (src.empty()) { cout << "could not load the src image!" << endl; return -1; } char *input_title = "input Image"; imshow(input_title, src); Mat dst; int top = (int)(0.05 * src.rows); int bottom = (int)(0.05 * src.rows); int left = (int)(0.05 * src.cols); int right = (int)(0.05 * src.cols); RNG rng(12345); int borderType = BORDER_DEFAULT; int c = 0; while (true) { c = waitKey(500); if ((char)c == 27) // ESC { break; } if ((char)c == 'r') // r { borderType = BORDER_REPLICATE; } else if ((char)c == 'w') // w { borderType = BORDER_WRAP; } else if ((char)c == 'c') // c { borderType = BORDER_DEFAULT; } Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); copyMakeBorder(src, dst, top, bottom, left, right, borderType, color); imshow("output image", dst); } GaussianBlur(src, dst, Size(5, 5), 0, 0, BORDER_DEFAULT); // waitKey(0); return 0;}

使用说明

代码结构

  • 图像加载与初始化

    • 使用imread函数加载图像。
    • 检查图像是否加载成功,若加载失败则输出提示信息并退出程序。
  • 图像显示

    • 使用imshow函数显示图像,设置窗口标题为"input Image"。
  • 边界处理设置

    • 定义边界顶部、底部、左侧和右侧的位置,分别占图像的5%。
    • 使用随机数生成器初始化随机数生成器。
    • 设置边界处理类型,默认为BORDER_DEFAULT
  • 用户交互与界面反馈

    • 使用waitKey函数进入事件循环,等待用户输入事件。
    • 根据用户输入事件(如按下'r'键)切换边界处理类型。
    • 根据随机生成的颜色生成边界颜色,并使用copyMakeBorder函数复制并调整图像边界。
    • 使用imshow函数显示处理后的图像。
  • 高斯模糊处理

    • 使用GaussianBlur函数对图像进行高斯模糊处理。
    • 最后使用waitKey(0)保持窗口在屏幕上显示。
  • 实际操作步骤

  • 安装OpenCV环境

    • 确保OpenCV库已正确安装,确保能够正常编译和运行代码。
  • 运行代码

    • 将代码保存为.cpp文件,添加相应的头文件路径。
    • 在支持C++编译的开发环境(如VS2015)下编译并运行程序。
    • 通过命令行参数或图形用户界面选择需要处理的图像文件。
  • 参数调整

    • 可根据需求调整边界宽度比例、颜色随机生成范围等参数。
    • 使用不同的边界处理类型(如BORDER_REPLICATEBORDER_WRAP)对比图像边界处理效果。
  • 效果展示

    • 通过实时图像显示和高斯模糊处理效果,直观展示边界处理结果。
  • 代码实现

    核心代码片段

    Mat src = imread("E:\\vs2015\\opencvstudy\\1.jpg", 1);if (src.empty()){	cout << "could not load the src image!" << endl;	return -1;}char *input_title = "input Image";imshow(input_title, src);Mat dst;int top = (int)(0.05 * src.rows);int bottom = (int)(0.05 * src.rows);int left = (int)(0.05 * src.cols);int right = (int)(0.05 * src.cols);RNG rng(12345);int borderType = BORDER_DEFAULT;while (true){	c = waitKey(500);	if ((char)c == 27) // ESC	{		break;	}	if ((char)c == 'r') // r	{		borderType = BORDER_REPLICATE;	}	else if ((char)c == 'w') // w	{		borderType = BORDER_WRAP;	}	else if ((char)c == 'c') // c	{		borderType = BORDER_DEFAULT;	}	Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));	copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);	imshow("output image", dst);}GaussianBlur(src, dst, Size(5, 5), 0, 0, BORDER_DEFAULT);

    代码优化建议

  • 代码简化

    • 去除不必要的空白行与注释,便于阅读与维护。
    • 使用简洁的变量名,提升代码可读性。
  • 参数预定义

    • 将常用参数(如边界宽度比例)定义为常量,提高代码可维护性。
  • 异常处理

    • imread函数调用时增加异常处理,确保程序稳定运行。
  • 性能优化

    • 调整图像显示频率,避免因高帧率消耗过多资源。
  • 注释优化

    • 保持注释简洁明了,避免冗长的解释文字。
  • 总结

    通过本文的示例代码,读者可以快速掌握OpenCV图像处理库的基本操作。从图像加载与显示到边界处理与高斯模糊,每一步都清晰地展示了实现细节。通过实际操作与参数调整,读者可以根据需求对图像进行多样化处理。

    转载地址:http://wmsfk.baihongyu.com/

    你可能感兴趣的文章
    OfficeWeb365 Indexs 任意文件读取漏洞复现
    查看>>
    OfficeWeb365 Readfile 任意文件读取漏洞复现
    查看>>
    OfficeWeb365 SaveDraw 文件上传漏洞复现
    查看>>
    office中的所有content type
    查看>>
    office之Excel 你会用 Ctrl + E 吗?
    查看>>
    Office办公软件里的“开发工具”选项卡-ChatGPT4o作答
    查看>>
    Office开发工具选项卡中的控件-ChatGPT4o作答
    查看>>
    Offline Installation the .NET Framework 3.5 on Windows 8
    查看>>
    OGC服务标准(地图资料篇.3)
    查看>>
    OGG初始化之使用数据库实用程序加载数据
    查看>>
    ogg参数解析
    查看>>
    ognl详解
    查看>>
    Ogre 插件系统
    查看>>
    Oil Deposits
    查看>>
    oj2894(贝尔曼福特模板)
    查看>>
    OJ4TH|Let's play a game
    查看>>
    OJ中处理超大数据的方法
    查看>>
    OJ中常见的一种presentation error解决方法
    查看>>
    OK335xS UART device registe hacking
    查看>>
    ok6410内存初始化
    查看>>