opencv 图像阴影检测
参数说明:
IplImage *workImg-当前全局变量,表示正在显示的图片。
downleft, upright- 检测出的阴影部分矩形框的两个对角顶点。
/*********************************************/
//阴影检测
/*********************************************/ CvPoint downleft,upright;
int cnt;
int dir[][]={-,-,-,,-,,,,,-,,,,,,-};
#define SHADOW 170
#define Thres_KindNumber 20 bool InRange(CvPoint point,IplImage* pi)
{
int w=pi->width;
int h=pi->height;
if(point.x>=&&point.x<w&&point.y>=&&point.y<h)
{
float v[];
for(i=;i<;i++)
{
v[i]=((uchar*)(pi->imageData + pi->widthStep*point.y))[point.x*+i];
if(v[i]<=SHADOW)
return true;
}
}
return false;
} void Dye(IplImage** curimg,CvPoint s)
{
int i;
queue<CvPoint>Q;
Q.push(s); for(i=;i<;i++)
((uchar*)((*curimg)->imageData + (*curimg)->widthStep*s.y))[s.x*+i]=SHADOW+; while(!Q.empty())
{
s=Q.front();
Q.pop(); if(s.x<downleft.x) downleft.x=s.x;
if(s.y<downleft.y) downleft.y=s.y;
if(s.x>upright.x) upright.x=s.x;
if(s.y>upright.y) upright.y=s.y; //dye around
for(i=;i<;i++)
{
CvPoint now=cvPoint(s.x+dir[i][],s.y+dir[i][]);
if(InRange(now,*curimg))
{
Q.push(now);
cnt++;
for(i=;i<;i++)
((uchar*)((*curimg)->imageData + (*curimg)->widthStep*now.y))[now.x*+i]=SHADOW+;
}
}
}
} void CCVMFCView::OnShadowDetect()
{
//detect shadows,find the region with highest pixel value
int x,y;
srcimg=workImg;
for(y=;y<srcimg->height;y++)
for(x=;x<srcimg->width;x++)
{
CvPoint curp=cvPoint(x,y);
downleft.x=srcimg->width;downleft.y=srcimg->height;
upright.x=upright.y=;
cnt=; if(InRange(curp,srcimg))
Dye(&srcimg,curp);
if(cnt>Thres_KindNumber)
cvRectangle(workImg , downleft,upright,CV_RGB(,,),,CV_AA,);
}
Invalidate();
}
from: http://blog.csdn.net/abcjennifer/article/details/7334043
opencv 图像阴影检测的更多相关文章
- OpenCV图像轮廓检测
轮廓检测: 轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 一.关键函数1.1 cvFindContours函数功能:对图像进行轮廓检测,这个函数将 ...
- OpenCV: 图像连通域检测的递归算法
序言:清除链接边缘,可以使用数组进行递归运算; 连通域检测的递归算法是定义级别的检测算法,且是无优化和无语义失误的. 同样可用于寻找连通域 void ClearEdge(CvMat* MM,CvPoi ...
- OPENCV图像特征点检测与FAST检测算法
前面描述角点检测的时候说到,角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测方法 FAST SURF ...
- 基于OpenCV的火焰检测(一)——图像预处理
博主最近在做一个基于OpenCV的火焰检测的项目,不仅可以检测图片中的火焰,还可以检测视频中的火焰,最后在视频检测的基础上推广到摄像头实时检测.在做这个项目的时候,博主参考了很多相关的文献,用了很多种 ...
- OpenCV特征点检测------ORB特征
OpenCV特征点检测------ORB特征 ORB是是ORiented Brief的简称.ORB的描述在下面文章中: Ethan Rublee and Vincent Rabaud and Kurt ...
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...
- opencv车道线检测
opencv车道线检测 完成的功能 图像裁剪:通过设定图像ROI区域,拷贝图像获得裁剪图像 反透视变换:用的是老师给的视频,没有对应的变换矩阵.所以建立二维坐标,通过四点映射的方法计算矩阵,进行反透视 ...
- OpenCV特征点检测算法对比
识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点, ...
- 【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
随机推荐
- Microsoft AzureStorageAccount for Powershell
使用Powershell 创建的存储账户,注意StorageAccountName只能使用小写字母以及数字, -Location参考http://www.cnblogs.com/SignalTips/ ...
- System V消息队列
消息的基本属性 System V的消息属性包含在一个msqid_ds的结构中 struct msqid_ds{ struct ipc_cerm msg_perm; //读取权限, 0644, 0777 ...
- 在Debian中安装VMware Workstatption 12
在Debian中安装VMware Workstatption 12-----------------------------------------------> 下载文件: *vmwar ...
- MVC学习系列——ModelBinder扩展
在MVC系统中,我们接受数据,运用的是ModelBinder 的技术. MVC学习系列——ActionResult扩展在这个系列中,我们自定义了XmlResult的返回结果. 那么是不是意味着能POS ...
- AVPlayer的基本使用
2014-5-7 06:46| 发布者: admin| 查看: 437| 评论: 0 摘要: 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要 ...
- vxworks启动
- sharepoint mysite and upgrade topics
My Sites overview (SharePoint Server 2010)http://technet.microsoft.com/en-us/library/ff382643(v=offi ...
- 屏蔽ios7中某个页面的默认手势滑回返回
- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:YES];self.navigationController.in ...
- SQLServer2005:在执行批处理时出现错误。错误消息为: 目录名无效
删除数据时忘了想delete删除的话会记录日志,更何况是我删除百万条数据,结果还没删完服务器内存就占慢了,一切数据都进不来了,估计这种情况导致我的数据库有问题了,右键打开表提示:目录名无效,执行SQL ...
- android 开发解密时出现pad block corrupted 错误
情景:在虚拟机上运行正常的,但是到我的真机上就解密失败,出现pad block corrupted ,据说是版本原因:我机器是小米3 最新版的android 4.2 出现问题的代码: privat ...