大家好,今天来为大家解答Android平台下的OpenCV数学形态学应用详解这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
* 形态过滤函数morphologyEx()
* 参数1:输入图片
* 参数2;输出图片
* 参数3:形态学操作类型MORPH_ERODE //腐蚀
* MORPH_DILATE //扩展
* MORPH_OPEN 打开操作
* MORPH_CLOSE 关闭操作
* MORPH_GRADIENT 渐变操作
* MORPH_TOPHAT //高顶礼帽
* MORPH_BLACKHAT //黑帽
* MORPH_HITMISS//命中-未命中变换
* 参数4:核心,当该值为NULL时,默认为3*3核心
* 参数5:锚点
* 参数6:迭代次数
* 参数7:边界模式
* 参数8:当边界值为常数时,会有一个默认值
*/
CV_EXPORTS_W voidmorphicEx(InputArray src,OutputArray dst,int op,InputArray内核,点锚点=Point(-1,-1),int迭代=1,int borderType=BORDER_CONSTANT,const标量borderValue=形态DefaultBorderValue());膨胀扩展:参考内核,找到局部最大值,所以亮度高的地方就会扩展。具体介绍参考:这里写链接内容
Mat img(h,w,CV_8UC4,像素);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//展开操作
morphoEx(img,img,MORPH_DILATE,coreMat);在这里写图像描述
腐蚀腐蚀:参考核心,找到局部最小值,所以暗的地方会越来越大。具体介绍参考:这里写链接内容
Mat img(h,w,CV_8UC4,像素);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//腐蚀操作
形态Ex(img,img,MORPH_ERODE,coreMat);在这里写下图片描述
开运算开放操作:先腐蚀后膨胀,消除小物体,在细腻点处分离物体,平滑较大物体的边界,操作过程中原图像尺寸不会发生明显变化。
Mat img(h,w,CV_8UC4,像素);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//打开操作
形态Ex(img,img,MORPH_OPEN,coreMat);在这里写下图片描述
闭运算封闭运算:先膨胀后腐蚀,消除小黑洞,使图像更鲜亮。
Mat img(h,w,CV_8UC4,像素);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//关闭操作
morphoEx(img,img,MORPH_CLOSE,coreMat);在此写入图像描述
梯度形态梯度:膨胀图和侵蚀图(dilate-erode)的区别,可以保留物体的边缘轮廓。
Mat img(h,w,CV_8UC4,像素);
矢量输出通道;
//分色
分割(img,outchannel);
垫出3img;
//颜色形式转换
cvtColor(img,out3img,COLOR_BGRA2BGR);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//形态梯度运算
形态学Ex(out3img,out3img,MORPH_GRADIENT,coreMat);
uchar * ptr=img.ptr(0);
uchar *out=out3img.ptr(0);
//只获取BGR
for (int i=0; i h * w; ++i) {
ptr[4*i+0]=输出[3*i+0];
ptr[4*i+1]=out[3*i+1];
ptr[4*i+2]=out[3*i+2];
}在这里写下图片描述
顶帽Top hat:利用原始图像与开运算的差异进行背景提取(当存在大背景或有规则图案的小物体时)。
Mat img(h,w,CV_8UC4,像素);
矢量输出通道;
//分色
分割(img,outchannel);
垫出3img;
//颜色形式转换
cvtColor(img,out3img,COLOR_BGRA2BGR);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//高顶帽子操作
形态Ex(out3img,out3img,MORPH_TOPHAT,coreMat);
uchar * ptr=img.ptr(0);
uchar *out=out3img.ptr(0);
//只获取BGR
for (int i=0; i h * w; ++i) {
ptr[4*i+0]=输出[3*i+0];
ptr[4*i+1]=out[3*i+1];
ptr[4*i+2]=out[3*i+2];
}在这里写下图片描述
黑帽黑帽:闭运算与原始图像的差异可以获得完美的轮廓图像。
Mat img(h,w,CV_8UC4,像素);
矢量输出通道;
//分色
分割(img,outchannel);
垫出3img;
//颜色形式转换
cvtColor(img,out3img,COLOR_BGRA2BGR);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//黑帽操作
形态Ex(out3img,out3img,MORPH_BLACKHAT,coreMat);
uchar * ptr=img.ptr(0);
uchar *out=out3img.ptr(0);
//只获取BGR
for (int i=0; i h * w; ++i) {
ptr[4*i+0]=输出[3*i+0];
ptr[4*i+1]=out[3*i+1];
ptr[4*i+2]=out[3*i+2];
}在这里写下图片描述
击中击不中变换Hit-miss 操作常用于二值图像。用于根据结构元素的配置从图像中寻找具有一定像素排列特征的目标,例如单个像素、粒子中的交叉或垂直特征、直角边缘或其他用户定义的特征等。计算时,只有当结构元素与其覆盖的图像区域完全相同时,中心像素的值才会被设置为1,否则为0。与直接减去腐蚀的原始图像相比,hit-miss变换保留了更多细节和边缘更加突出。
Mat img(h,w,CV_8UC4,像素);
垫出;
//转换为单通道图像
cvtColor(img,输出,COLOR_BGR2GRAY);
//核
Mat coreMat=getStructuringElement(MORPH_RECT,Size(10,10));
//命中-未命中变换操作src.type()==CV_8UC1
形态Ex(out,out,MORPH_HITMISS,coreMat);
uchar *ptr=img.ptr(0);
uchar *outPtr=out.ptr(0);
整数大小=宽*高;
for (int i=0; i 大小; ++i) {
ptr[4*i+0]=outPtr[I];
ptr[4*i+1]=outPtr[I];
【Android平台下的OpenCV数学形态学应用详解】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
最近在找资料研究图像处理,这方面的东西好像很实用哦!
有15位网友表示赞同!
OpenCV真强大,都能在Android上直接用呢?
有13位网友表示赞同!
形态学的应用场景蛮多,比如图像编辑啊、识别的领域应该都有吧。
有15位网友表示赞同!
学习一下这些知识可能会有帮助,以后项目方便些
有5位网友表示赞同!
感觉文章内容挺全面的,希望能详细讲讲一些常用操作函数。
有15位网友表示赞同!
OpenCV这个库真是万能呀,各种平台都可以用!
有5位网友表示赞同!
安卓上的图像处理,之前还没接触过,期待学习一下~
有15位网友表示赞同!
形态学有点像数学里的图形变换的感觉,挺新奇的!
有10位网友表示赞同!
能把复杂的操作都封装成一些函数,感觉开发起来方便多了
有7位网友表示赞同!
Android 开发越来越专业了,连图像处理都用上OpenCV了!
有10位网友表示赞同!
看看这篇文章能不能帮助我解决一些图像相关的项目问题。
有13位网友表示赞同!
最近想在手机上做点图像识别的小游戏,这个技巧说不定可以用得着
有6位网友表示赞同!
真希望能看到一些实际应用案例呀,那样更能理解形态学的用途。
有14位网友表示赞同!
感觉学习起来应该挺有趣的,有机会试试看!
有16位网友表示赞同!
OpenCV的文档看起来有点复杂,需要慢慢积累经验才能掌握!
有16位网友表示赞同!
希望老师能够分享一些开发技巧,帮助我们更好地利用OpenCV
有16位网友表示赞同!
这个技术领域发展速度很快,一定要跟上趋势啊!
有11位网友表示赞同!
感觉学习图像处理是一件很有成就感的技能!
有9位网友表示赞同!
期待看到更多使用OpenCV实现Android应用的文章分享。
有6位网友表示赞同!