版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include#include#includeusing 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 100)binaryImage.datai*grayImage.step + j = 255;elsebinaryImage.datai*grayIma
2、ge.step + j = 0;imshow(binaryImage, binaryImage);return binaryImage;/创建结构元素/一般结构元素 关于原点对称/Mat createSE()/int a33= 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 binaryEros
3、ionImage(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 binaryImage.cols - (se.cols - 1) / 2; j+)/先设置第i行第j列像素值为255,即白色binaryErosionImage.datai*binaryImage.step + j = 255;for (int row = 0; row s
4、e.rows; row+)for (int col = 0; col se.cols; col+)/把se对应的元素赋值到与se结构相同的矩阵中window.datarow*window.step + col = binaryImage.data(i + row - (window.rows - 1) / 2)*binaryImage.step + (j + col - (window.cols - 1) / 2);/比较se与window中的像素值int row, col;for (row = 0; row se.rows; row+)for (col = 0; col se.cols; c
5、ol+)if (se.datarow*se.step + col != window.datarow*se.step + col)break;if (col = se.cols)continue;elsebreak;if (row = se.rows&col = se.cols)binaryErosionImage.datai*binaryImage.step + j = 0;/imshow(binaryErosionImage, binaryErosionImage);return binaryErosionImage;/二值图像膨胀操作Mat binaryDilation(Mat bina
6、ryImage, Mat 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 binaryImage.cols - (se.cols - 1) /
7、2; j+)/先设置第i行第j列像素值为255,即白色binaryDilationImage.datai*binaryImage.step + j = 255;for (int row = 0; row se.rows; row+)for (int col = 0; col se.cols; col+)/把se对应的元素赋值到与se结构相同的矩阵中window.datarow*window.step + col = binaryImage.data(i + row - (window.rows - 1) / 2)*binaryImage.step + (j + col - (window.co
8、ls - 1) / 2);/比较se与window中的像素值/只要有一个相匹配 就把像素值设为0,即置黑int flag = 0; /标记是否有对应相等的像素值:0表示没有,1表示有int row, col;for (row = 0; row se.rows; row+)for (col = 0; col se.cols; col+)if (se.datarow*se.step + col = window.datarow*se.step + col)flag = 1;if (flag)/如果有交集,就设置为黑,即0binaryDilationImage.datai*binaryImage.s
9、tep + j = 0;/imshow(binaryDilationImage, 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
10、- 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.datai*grayImage.step + j = 255;for (int row = 0; row se.rows; row+)for (int col = 0; col se.cols; col+)/把se对应的元素赋值到与se结构相同的矩阵window中window
11、.datarow*window.step + col = grayImage.data(i + row - (window.rows - 1) / 2)*grayImage.step + (j + col - (window.cols - 1) / 2);/比较se与window中的像素值/在灰度图像中,腐蚀是取window中最小的值赋值给原点所对用的像素int minPixel = 255;int row, col;for (row = 0; row se.rows; row+)for (col = 0; col se.cols; col+)if (window.datarow*se.ste
12、p + col minPixel)minPixel = window.datarow*se.step + col;grayErosionImage.datai*grayImage.step + j = minPixel;/*imshow(grayErosionImage, grayErosionImage);*/return grayErosionImage;/灰度图像膨胀操作Mat grayDilation(Mat grayImage,Mat se)/结构元素移动时所对应的源图像区域Mat window(se.rows, se.cols, CV_8UC1);/定义一个矩阵,存储腐蚀后的图像M
13、at grayDilationImage(grayImage.rows, 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.datai*grayImage.step + j = 255;for (int row
14、 = 0; row se.rows; row+)for (int col = 0; col se.cols; col+)/把se对应的元素赋值到与se结构相同的矩阵window中window.datarow*window.step + col = grayImage.data(i + row - (window.rows - 1) / 2)*grayImage.step + (j + col - (window.cols - 1) / 2);/比较se与window中的像素值/在灰度图像中,膨胀是取window中最大的值赋值给原点所对用的像素int maxPixel = 0;int row,
15、col;for (row = 0; row se.rows; row+)for (col = 0; col maxPixel)maxPixel = window.datarow*se.step + col;grayDilationImage.datai*grayImage.step + j = maxPixel;/*imshow(grayDilationImage, grayDilationImage);*/return grayDilationImage;/二值图像开操作Mat binaryOpen(Mat binaryImage, Mat se)Mat openImage(binaryIm
16、age.rows,binaryImage.cols,CV_8UC1,Scalar(0);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)
17、, se);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 closeImage(grayImage.rows, grayImage.cols, CV_
18、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(binaryImage.rows, binaryImage.cols, CV_8UC1, Scalar(0);erosionImage = b
19、inaryErosion(binaryImage,se);for (int i = 0; i erosionImage.rows; i+)for (int j = 0; j erosionImage.cols; j+)if (binaryImage.datai*erosionImage.step+j!=erosionImage.datai*erosionImage.step+j)borderImage.datai*erosionImage.step + j = 255;return borderImage;/灰度图像边界提取Mat grayBorder(Mat grayImage, Mat s
20、e)Mat borderImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0);borderImage = grayImage - grayErosion(grayImage, se);return borderImage;/灰度图像梯度Mat gradient(Mat grayImage, Mat se)Mat gradient(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0);gradient = grayDilation(grayImage, se) - grayErosion(
21、grayImage, se);return gradient;/灰度图像的顶帽运算 T(f)=f-fobMat topHat(Mat grayImage,Mat se)Mat topHatImage(grayImage.rows, grayImage.cols, CV_8UC1, Scalar(0);topHatImage = grayImage - grayOpen(grayImage,se);return topHatImage;/灰度图像的底帽运算 B(f)=fb-fMat bottomHat(Mat grayImage, Mat se)Mat bottomHatImage(grayIm
22、age.rows, grayImage.cols, CV_8UC1, Scalar(0);bottomHatImage = grayClose(grayImage, se)-grayImage;return bottomHatImage;int main()Mat src = imread(E:projectimages32.jpg);Mat grayImage(src.rows, src.cols, CV_8UC1);/转化为灰度图像cvtColor(src, grayImage, CV_BGR2GRAY);imshow(original Image,src);imshow(gray Ima
23、ge, grayImage);/转化为二值图像Mat binaryImage = changeToBinaryImage(grayImage);/创建模板 一般结构元素关于自身原点对称 /也可以自定义结构元素 下面的变量是3*3的矩阵 全部为0 Mat structureElement(3, 3, CV_8UC1, Scalar(0);/调用二值图像腐蚀函数/binaryErosion(binaryImage, structureElement);imshow(binaryErosionImage, binaryErosion(binaryImage, structureElement);/调
24、用二值图像膨胀函数/binaryDilation(binaryImage, structureElement);imshow(binaryDilationImage, binaryDilation(binaryImage, structureElement);/调用灰度图像腐蚀函数/grayErosion(grayImage, structureElement);imshow(grayErosionImage, grayErosion(grayImage, structureElement);/调用灰度图像膨胀函数/grayDilation(grayImage, structureElement);imshow(grayDilationImage, grayDilat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江盐集团盐品事业部招聘24人笔试备考试题及答案解析
- 2026广西玉林市红十字会医院人才招聘15人笔试模拟试题及答案解析
- 著名教育家的教学理念解析
- 商贸公司规章制度
- 建筑施工工艺流程
- 企业年度计划工作会议纪要-原创
- 浙江省百校2026届高二生物第二学期期末经典试题含解析
- 2025年通化市税务系统遴选面试真题带详解含答案
- 线路维保方案
- 冀少版小学二年级下册音乐教案
- 2026山东省港口集团有限公司社会招聘笔试备考试题及答案解析
- 360人工智能安全团队2026年OpenClaw安全部署与实践指南360护航版
- 篮球馆内部人员管理制度
- 2026云南楚雄市司法局第一批司法协理员招聘10人考试参考试题及答案解析
- 外贸服装业务部管理制度
- 中央预算资金34个细分领域资金分布比例及项目申报实操
- 2026青海海东公安招录32名人民警察备考题库及答案详解(夺冠系列)
- 2026西藏自治区教育考试院招聘非编工作人员11人备考考试题库及答案解析
- 码头现场调度培训课件
- 2026年政府采购培训试题200道及参考答案【新】
- 家长安全培训内容文案课件
评论
0/150
提交评论