- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.OPenCV提高图像对比度(掩膜操作)的两种方法
OPenCV提高图像对比度(掩膜操作)的两种方法
实现原理:
采用掩膜操作来提高图像对比度
矩阵的掩码操作相当简单。我们根据一个掩膜矩阵(也称为内核)重新计算每
个像素值。这个掩码包含的值将会调整相邻像素(以及当前像素)对新像素值的影
响。从数学的角度来看,我们用指定值做加权平均数。
让我们来考虑一下图像对比度增强的问题。基本上我们要对图像的每一个像
素应用下面的公式:
上面那种表达法是公式的形式,而下面那种是以掩码矩阵表示的紧凑形式。
使用掩码矩阵的时候,我们先把矩阵中心的元素 (上面的例子中是(0,0)位置的元
素,也就是5)对齐到要计算的目标像素上,再把邻域像素值和相应的矩阵元素
值的乘积加起来。虽然这两种形式是完全等价的,但在大矩阵情况下,下面的形
式看起来会清楚得多。
现在,我们来看看实现掩码操作的两种方法。一种方法是用基本的像素访问
方法,另一种方法是用 filter2D 函数。
方法一、基本的像素访问方法:
void Sharpen(const Mat myImage,Mat Result)
{
CV_Assert(myImage.depth()== CV_8U); // accept only uchar images
const int nChannels = myImage.channels();
Result.create(myImage.size(),myImage.type());
for(int j = 1 ; j myImage.rows-1; ++j)
{
const uchar* previous = myImage.ptruchar(j - 1);
const uchar* current = myImage.ptruchar(j );
const uchar* next = myImage.ptruchar(j + 1);
uchar* output = Result.ptruchar(j);
for(int i= nChannels;i nChannels*(myImage.cols-1); ++i)
{
*output++ = saturate_castuchar(5*current[i]
-current[i-nChannels] - current[i+nChannels] - previous[i] -
next[i]);
}
}
Result.row(0).setTo(Scalar(0));
Result.row(Result.rows-1).setTo(Scalar(0));
Result.col(0).setTo(Scalar(0));
Result.col(Result.cols-1).setTo(Scalar(0));
}
首先,我们确保输入图像数据是无符号字符格式。为此,我们使用
cv::CV_Assert函数,当它的表达式为假时,抛出一个错误。
CV_Assert(myImage.depth()== CV_8U); // accept only uchar images
我们创建一个和输入图像同样大小和同样类型的输出图像。根据通道数我们
可能有一个或多个子列。我们将通过指针来遍历输入图像。
const int nChannels = myImage.channels();
Result.create(myImage.size(),myImage.type());
我们将使用C中的[]操作符来访问每一个像素。因为我们需要同时使用多行,
因此我们将获得每一行的指针 (前一行,当前行,后一行),我们需要另外一个
指针来保存我们的计算结果。然后使用[]就可以简单地访问每一个元素了。在每
一次操作之后都要移动输出指针指向下一位。
for(int j = 1 ; j myImage.rows-1; ++j)
{
const uchar* previous = myImage.ptruchar(j - 1);
const uchar* current = myImage.ptruchar(j );
const uchar* next = myImage.ptruchar(j + 1);
uchar* output = Result.ptruc
您可能关注的文档
最近下载
- 2025年初二政治培优补差工作计划(通用9篇).pdf VIP
- 2023年最新资料员考试题库附参考答案【精练】.docx
- 国内长视频行业市场分析.pdf VIP
- 中国医科大学《护理研究(本科)》在线作业.docx VIP
- 2025高校辅导员素质能力大赛模拟试卷附答案.docx VIP
- 2010款捷达全车电路图.pdf VIP
- 家用新能源汽车充电桩安装施工方案.pdf VIP
- 5eDnD_凡戴尔的失落矿坑_模组_中译(二校).pdf VIP
- 2025至2030中国长视频行业市场深度调研及发展趋势和投资前景预测报告.docx VIP
- 政府车队公务车辆定点维修采购项目招标文件参考修改模板范本.doc VIP
原创力文档


文档评论(0)