C语言如何实现BMP图像闭运算处理
发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,这篇文章主要介绍了C语言如何实现BMP图像闭运算处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。闭运算可以把比结构元素小的特定图像细
千家信息网最后更新 2024年09月24日C语言如何实现BMP图像闭运算处理
这篇文章主要介绍了C语言如何实现BMP图像闭运算处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
闭运算可以把比结构元素小的特定图像细节出去,同时保证不产生全局的几何失真。填充比结构元素小的缺口或孔,搭接短的间断而起到连接作用。
运算:也就是先膨胀后腐蚀。
#include#include #include int main(int* argc, char** argv){ FILE* fp = fopen("./threshold.bmp", "rb"); if (fp == 0) return 0; BITMAPFILEHEADER fileHead; fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp); BITMAPINFOHEADER infoHead; fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fp); int width = infoHead.biWidth; int height = infoHead.biHeight; int biCount = infoHead.biBitCount; int lineByte = (biCount*width / 8 + 3) / 4 * 4; RGBQUAD* pColorTable; pColorTable = new RGBQUAD[256]; fread(pColorTable, sizeof(RGBQUAD), 256, fp); unsigned char* pBmpBuf; pBmpBuf = new unsigned char[lineByte*height]; fread(pBmpBuf, lineByte*height, 1, fp); fclose(fp); // 新图 FILE* fop = fopen("close.bmp", "wb"); if (fop == 0) return 0; // 膨胀操作 // 初始化 int t = 0, d = 0, r = 0; unsigned char* pBmpBuf2; pBmpBuf2 = new unsigned char[lineByte*height]; for (int i = 0; i < height; ++i){ for (int j = 0; j < width; ++j){ *(pBmpBuf2 + i*lineByte + j) = 255; } } for (int i = 1; i < height; ++i){ for (int j = 0; j < width - 1; ++j){ t = *(pBmpBuf + i*lineByte + j); // 当前点 d = *(pBmpBuf + (i - 1)*lineByte + j); // 下面点 r = *(pBmpBuf + i*lineByte + j + 1); // 右边点 if (t == 0 && d == 0 && r == 0){ *(pBmpBuf2 + i*lineByte + j) = 0; // 当前点 } } } // 结构元素向上反转180度,对最下面一排处理 for (int j = 0; j < width - 1; ++j){ t = *(pBmpBuf + j); // 当前点 d = *(pBmpBuf + lineByte + j); // 上面点 r = *(pBmpBuf + j + 1); // 右边点 if (t == 0 && d == 0 && r == 0){ *(pBmpBuf2 + j) = 0; // 当前点 } } // 结构元素向右反转,对最右边一列处理 for (int i = 1; i < height; ++i){ t = *(pBmpBuf + i*lineByte + width - 1); d = *(pBmpBuf + (i - 1)*lineByte + width - 1); r = *(pBmpBuf + i*lineByte + width - 2); if (t == 0 && d == 0 && r == 0){ *(pBmpBuf2 + i*lineByte + width - 1) = 0; // 当前点 } } // 腐蚀操作 for (int i = 1; i < height; ++i){ for (int j = 0; j < width - 1; ++j){ t = *(pBmpBuf2 + i*lineByte + j); // 当前点 d = *(pBmpBuf2 + (i - 1)*lineByte + j); // 下面点 r = *(pBmpBuf2 + i*lineByte + j + 1); // 右边点 if (t == 0 && d != 0){ *(pBmpBuf2 + (i - 1)*lineByte + j) = 0;//下边的置位1 } if (t == 0 && r != 0){ *(pBmpBuf2 + i*lineByte + j + 1) = 0;//右边的置位1 j = j + 1; } } } fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fop); fwrite(&infoHead, sizeof(BITMAPINFOHEADER), 1, fop); fwrite(pColorTable, sizeof(RGBQUAD), 255, fop); fwrite(pBmpBuf2, lineByte*height, 1, fop); fclose(fop); system("pause"); return 0;}
实验结果:
感谢你能够认真阅读完这篇文章,希望小编分享的"C语言如何实现BMP图像闭运算处理"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
前点
右边
处理
运算
元素
篇文章
结构
图像
面点
语言
同时
也就是
价值
作用
全局
兴趣
几何
搭接
更多
朋友
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
姑苏区无忧网络技术诚信经营
网络安全英语作文六级
如何把pdf放到服务器
单机传奇物品数据库
网络技术大赛ep1
pubmed数据库费用
win7搭建外网服务器
战舰世界服务器即将维护
网络安全放诈骗手抄报
有国家网络安全局吗
青浦区管理软件开发厂家价格
网络安全方面的宣讲
电子网络技术招工
电猫科技互联网有限公司
综合软件开发发展
普陀区一站式数据库服务商价钱
学校有网络安全宣传活动吗
异星探险家服务器昵称
ps4安装程序数据库损坏
百亿加互联网科技
网络金融与网络安全 教材
地理数据库与传统数据库的区别
方舟服务器怎么挂机不被踢
嘉兴网络安全科技馆
可靠的dell服务器回收
东莞专业软件开发代理价格
网络安全考研院校非双一流
瀚云科技互联网
模拟软件开发
未连接到远程服务器是什么意思