千家信息网

C语言如何实现BMP图像闭运算处理

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍了C语言如何实现BMP图像闭运算处理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。闭运算可以把比结构元素小的特定图像细
千家信息网最后更新 2025年01月31日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安全错误 数据库的锁怎样保障安全 济南地区联想服务器代理服务 ip如何代理服务器 烟台市兴凯网络技术有限责任公司 如何在服务器上添加安全组 手机可以远程访问服务器吗 软件开发各阶段 甲方职责 方舟服务器为什么只有亚服 热血传说什么时候开服务器 北京做旅游软件开发 黑客及其网络安全 网络安全内蒙古自治区 小学如何落实网络安全工作 网络安全工程专业在职研究生 网络技术的军事运用 关于软件开发的企划书 两台电脑和数据库实现通信 微信小程序云开发数据库查找 谈谈中国5g网络技术作文 长鑫储存软件开发 重大网络安全事件分析研判 表格如何匹配原数据库 嘉定区网络技术咨询报价 数据库查看成绩最高的学号 网络安全年会举办 上海妍美网络技术有限公司 常山民宿软件开发 英雄联盟重新连接服务器失败 象牙云服务器 贵州航信服务器安全接入地址 废弃电脑改阵列服务器
0