全国服务热线:

15861139266

扬州Opencv视觉去除图像阴影功能实现
时间:2024-12-05 13:38:51 点击:4609 标签:
一、前言
在浏览 OpenCV 相关文章时发现了《基于 OpenCV 的图像阴影去除》,其源码使用 Python 实现。这里分析了其原理后,苏州机器视觉老师用 OpenCV 的 C++ 版进行实现。
二、实现思路
  1. 首先将图像转为灰度图,这样可以简化处理过程,只关注图像的亮度信息。
    • 使用cvtColor函数将彩色图像src转换为灰度图像gray。
Mat src = imread("D:/opencv练习图片/去阴影.png");
imshow("原图", src);
//1.将图像转为灰度图
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
  1. 对灰度图进行闭运算操作。
    • 闭运算是先膨胀后腐蚀的操作,可以填充图像中的小孔和连接邻近的物体。定义腐蚀和膨胀的结构化元素为矩形,大小为(3, 3),以及迭代次数为9。
    • 使用morphologyEx函数对灰度图gray进行闭运算,得到closeMat。
//定义腐蚀和膨胀的结构化元素和迭代次数
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
int iteration = 9;
//2.将灰度图进行闭运算操作
Mat closeMat;
morphologyEx(gray, closeMat, MORPH_CLOSE, element, Point(-1, -1), iteration);
imshow("闭运算", closeMat);
  1. 闭运算后的图减去原灰度图再取反。
    • 用闭运算后的图像closeMat减去原灰度图gray,得到一个差值图像。然后对这个差值图像取反,得到calcMat。这个操作的目的是突出图像中的阴影部分。
//4.闭运算后的图减去原灰度图再进行取反操作
Mat calcMat = ~(closeMat - gray);
imshow("calc", calcMat);
  1. 使用归一化将取反后的图中白色背景修改为贴近原图的灰色。
    • 归一化可以将图像的像素值范围调整到指定的区间。这里使用normalize函数将calcMat进行归一化处理,得到removeShadowMat,使得图像的背景颜色更接近原图的灰色,从而达到去除阴影的效果。
//5.使用规一化将原来背景白色的改了和原来灰度图差不多的灰色
Mat removeShadowMat;
normalize(calcMat, removeShadowMat, 0, 200, NORM_MINMAX);
imshow("dst", removeShadowMat);
通过以上步骤,可以实现基于 OpenCV 的图像阴影去除。这种方法对于一些简单的图像阴影去除有一定的效果,但对于复杂的场景可能需要进一步的调整和优化。同时,不同的图像可能需要调整结构化元素的大小、迭代次数以及归一化的参数等,以获得更好的结果。


立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
深度学习
机器视觉软件开发课
上位机软件开发课
电气类课程
联系方式
电话:15861139266
邮箱:75607802@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:大林机器视觉培训所有 备案号:苏ICP备14016686号-9

本站关键词:上位机培训 机器视觉软件开发培训 上位机运动控制培训 深度学习培训 网站标签