ImageVerifierCode 换一换
格式:DOC , 页数:26 ,大小:1.58MB ,
资源ID:9198738      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9198738.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(形态学基本操作与应用代码和结果展示.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

形态学基本操作与应用代码和结果展示.doc

1、include #include #include using namespace cv; //把灰度图像转化为二值图像 Mat changeToBinaryImage(Mat grayImage) { Mat binaryImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); //转化为二值图像 for (int i = 0; i < grayImage.rows; i++) { for (int j = 0; j

2、 < grayImage.cols; j++) { if (grayImage.data[i*grayImage.step + j]>100) { binaryImage.data[i*grayImage.step + j] = 255; } else { binaryImage.data[i*grayImage.step + j] = 0; } } } imshow("binaryImage", binaryImage); return binaryImage; } //创建结构元素

3、//一般结构元素 关于原点对称 //Mat createSE() //{ // int a[3][3]={ 0,1,0, // 1,1,1, // 0,1,0}; // Mat structureElement(3, 3, CV_8UC1, a); //} //二值图像腐蚀操作 Mat binaryErosion(Mat binaryImage, Mat se) { //二值图像移动 Mat window(se.rows, se.cols, CV_8UC1); //定义一个矩阵,存储腐蚀后的图像 Mat binaryErosionImage(bina

4、ryImage.rows, binaryImage.cols, CV_8UC1, Scalar(0)); for (int i = (se.rows-1)/2; i < binaryImage.rows-(se.rows-1)/2; i++) { for (int j = (se.cols - 1) / 2; j < binaryImage.cols - (se.cols - 1) / 2; j++) { //先设置第i行第j列像素值为255,即白色 binaryErosionImage.data[i*binaryImage.step + j] = 25

5、5; for (int row = 0; row < se.rows; row++) { for (int col = 0; col < se.cols; col++) { //把se对应的元素赋值到与se结构相同的矩阵中 window.data[row*window.step + col] = binaryImage.data[(i + row - (window.rows - 1) / 2)*binaryImage.step + (j + col - (window.cols - 1) / 2)]; } }

6、 //比较se与window中的像素值 int row, col; for (row = 0; row < se.rows; row++) { for (col = 0; col < se.cols; col++) { if (se.data[row*se.step + col] != window.data[row*se.step + col]) { break; } } if (col == se.cols) { continue; }

7、 else { break; } } if (row == se.rows&&col == se.cols) { binaryErosionImage.data[i*binaryImage.step + j] = 0; } } } //imshow("binaryErosionImage", binaryErosionImage); return binaryErosionImage; } //二值图像膨胀操作 Mat binaryDilation(Mat binaryImage, M

8、at se) { //二值图像移动 Mat window(se.rows, se.cols, CV_8UC1); //定义一个矩阵,存储膨胀后的图像 Mat binaryDilationImage(binaryImage.rows, binaryImage.cols, CV_8UC1, Scalar(0)); for (int i = (se.rows - 1) / 2; i < binaryImage.rows - (se.rows - 1) / 2; i++) { for (int j = (se.cols - 1) / 2; j < binaryI

9、mage.cols - (se.cols - 1) / 2; j++) { //先设置第i行第j列像素值为255,即白色 binaryDilationImage.data[i*binaryImage.step + j] = 255; for (int row = 0; row < se.rows; row++) { for (int col = 0; col < se.cols; col++) { //把se对应的元素赋值到与se结构相同的矩阵中 window.data[row*window.step + col

10、] = binaryImage.data[(i + row - (window.rows - 1) / 2)*binaryImage.step + (j + col - (window.cols - 1) / 2)]; } } //比较se与window中的像素值 //只要有一个相匹配 就把像素值设为0,即置黑 int flag = 0; //标记是否有对应相等的像素值:0表示没有,1表示有 int row, col; for (row = 0; row < se.rows; row++) { for (col =

11、0; col < se.cols; col++) { if (se.data[row*se.step + col] == window.data[row*se.step + col]) { flag = 1; } } } if (flag) { //如果有交集,就设置为黑,即0 binaryDilationImage.data[i*binaryImage.step + j] = 0; } } } //imshow("binaryDilationImage"

12、 binaryDilationImage); return binaryDilationImage; } //灰度图像腐蚀操作 Mat grayErosion(Mat grayImage,Mat se) { //结构元素移动时所对应的源图像区域 Mat window(se.rows, se.cols, CV_8UC1); //定义一个矩阵,存储腐蚀后的图像 Mat grayErosionImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); for (int i = (se.rows

13、 - 1) / 2; i < grayImage.rows - (se.rows - 1) / 2; i++) { for (int j = (se.cols - 1) / 2; j < grayImage.cols - (se.cols - 1) / 2; j++) { //先设置第i行第j列像素值为255,即白色 grayErosionImage.data[i*grayImage.step + j] = 255; for (int row = 0; row < se.rows; row++) { for (int col = 0;

14、col < se.cols; col++) { //把se对应的元素赋值到与se结构相同的矩阵window中 window.data[row*window.step + col] = grayImage.data[(i + row - (window.rows - 1) / 2)*grayImage.step + (j + col - (window.cols - 1) / 2)]; } } //比较se与window中的像素值 //在灰度图像中,腐蚀是取window中最小的值赋值给原点所对用的像素 int minPi

15、xel = 255; int row, col; for (row = 0; row < se.rows; row++) { for (col = 0; col < se.cols; col++) { if (window.data[row*se.step + col] < minPixel) { minPixel = window.data[row*se.step + col]; } } } grayErosionImage.data[i*grayImage.s

16、tep + j] = minPixel; } } /*imshow("grayErosionImage", grayErosionImage);*/ return grayErosionImage; } //灰度图像膨胀操作 Mat grayDilation(Mat grayImage,Mat se) { //结构元素移动时所对应的源图像区域 Mat window(se.rows, se.cols, CV_8UC1); //定义一个矩阵,存储腐蚀后的图像 Mat grayDilationImage(grayImage.rows

17、 grayImage.cols, CV_8UC1, Scalar(0)); for (int i = (se.rows - 1) / 2; i < grayImage.rows - (se.rows - 1) / 2; i++) { for (int j = (se.cols - 1) / 2; j < grayImage.cols - (se.cols - 1) / 2; j++) { //先设置第i行第j列像素值为255,即白色 grayDilationImage.data[i*grayImage.step + j] = 255; for

18、int row = 0; row < se.rows; row++) { for (int col = 0; col < se.cols; col++) { //把se对应的元素赋值到与se结构相同的矩阵window中 window.data[row*window.step + col] = grayImage.data[(i + row - (window.rows - 1) / 2)*grayImage.step + (j + col - (window.cols - 1) / 2)]; } } //比较se与

19、window中的像素值 //在灰度图像中,膨胀是取window中最大的值赋值给原点所对用的像素 int maxPixel = 0; int row, col; for (row = 0; row < se.rows; row++) { for (col = 0; col < se.cols; col++) { if (window.data[row*se.step + col] > maxPixel) { maxPixel = window.data[row*se.step + col];

20、 } } } grayDilationImage.data[i*grayImage.step + j] = maxPixel; } } /*imshow("grayDilationImage", grayDilationImage);*/ return grayDilationImage; } //二值图像开操作 Mat binaryOpen(Mat binaryImage, Mat se) { Mat openImage(binaryImage.rows,binaryImage.cols,CV_8UC1,Scalar(0

21、)); openImage = binaryDilation(binaryErosion(binaryImage, se), se); return openImage; } //二值图像闭操作 Mat binaryClose(Mat binaryImage, Mat se) { Mat closeImage(binaryImage.rows, binaryImage.cols, CV_8UC1, Scalar(0)); closeImage = binaryErosion(binaryDilation(binaryImage, se), se);

22、 return closeImage; } //灰度图像开操作 Mat grayOpen(Mat grayImage, Mat se) { Mat openImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); openImage = grayDilation(grayErosion(grayImage, se), se); return openImage; } //灰度图像闭操作 Mat grayClose(Mat grayImage, Mat se) { Mat closeIm

23、age(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); closeImage = grayErosion(grayDilation(grayImage, se), se); return closeImage; } //二值图像边界提取 Mat binaryBorder(Mat binaryImage,Mat se) { Mat borderImage(binaryImage.rows, binaryImage.cols, CV_8UC1, Scalar(0)); Mat erosionImage(b

24、inaryImage.rows, binaryImage.cols, CV_8UC1, Scalar(0)); erosionImage = binaryErosion(binaryImage,se); for (int i = 0; i < erosionImage.rows; i++) { for (int j = 0; j < erosionImage.cols; j++) { if (binaryImage.data[i*erosionImage.step+j]!=erosionImage.data[i*erosionImage.step+j])

25、 { borderImage.data[i*erosionImage.step + j] = 255; } } } return borderImage; } //灰度图像边界提取 Mat grayBorder(Mat grayImage, Mat se) { Mat borderImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); borderImage = grayImage - grayErosion(grayImage, se); return bor

26、derImage; } //灰度图像梯度 Mat gradient(Mat grayImage, Mat se) { Mat gradient(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); gradient = grayDilation(grayImage, se) - grayErosion(grayImage, se); return gradient; } //灰度图像的顶帽运算 T(f)=f-fob Mat topHat(Mat grayImage,Mat se) { Mat t

27、opHatImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); topHatImage = grayImage - grayOpen(grayImage,se); return topHatImage; } //灰度图像的底帽运算 B(f)=f⋅b-f Mat bottomHat(Mat grayImage, Mat se) { Mat bottomHatImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0)); bottomHatI

28、mage = grayClose(grayImage, se)-grayImage; return bottomHatImage; } int main() { Mat src = imread("E:\\project\\images\\32.jpg"); Mat grayImage(src.rows, src.cols, CV_8UC1); //转化为灰度图像 cvtColor(src, grayImage, CV_BGR2GRAY); imshow("original Image",src); imshow("gray Image",

29、 grayImage); //转化为二值图像 Mat binaryImage = changeToBinaryImage(grayImage); //创建模板 一般结构元素关于自身原点对称 //也可以自定义结构元素 下面的变量是3*3的矩阵 全部为0 Mat structureElement(3, 3, CV_8UC1, Scalar(0)); //调用二值图像腐蚀函数 //binaryErosion(binaryImage, structureElement); imshow("binaryErosionImage", binaryEr

30、osion(binaryImage, structureElement)); //调用二值图像膨胀函数 //binaryDilation(binaryImage, structureElement); imshow("binaryDilationImage", binaryDilation(binaryImage, structureElement)); //调用灰度图像腐蚀函数 //grayErosion(grayImage, structureElement); imshow("grayErosionImage", grayErosion(grayImag

31、e, structureElement)); //调用灰度图像膨胀函数 //grayDilation(grayImage, structureElement); imshow("grayDilationImage", grayDilation(grayImage, structureElement)); //调用二值图像开操作 imshow("binaryOpenImage",binaryOpen(binaryImage,structureElement)); //调用二值图像闭操作 imshow("binaryCloseImage", binaryCl

32、ose(binaryImage, structureElement)); //调用灰度图像开操作 imshow("grayOpenImage", grayOpen(grayImage, structureElement)); //调用灰度图像闭操作 imshow("grayCloseImage", grayClose(grayImage, structureElement)); //二值图像边界提取 imshow("binaryBorderImage",binaryBorder(binaryImage,structureElement)); //灰度图

33、像边界提取 imshow("grayBorderImage",grayBorder(grayImage,structureElement)); //调用灰度梯度函数 imshow("Gradient", gradient(binaryImage, structureElement)); //调用顶帽函数 imshow("topHat",topHat(grayImage,structureElement)); //调用底帽函数 imshow("bottomHat", bottomHat(grayImage, structureElement)); cvWaitKey(0); return 0; } 结果展示: 原图 二值图像 二值图像腐蚀操作 二值图像膨胀操作 二值图像开操作 二值图像闭操作 灰度图像 灰度图像腐蚀操作 灰度图像膨胀操作 灰度图像开操作 灰度图像闭操作 二值图像--边界提取 灰度图像--边界提取 灰度图像--梯度提取 灰度图像--顶帽运算 灰度图像--底帽运算

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服