广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现BMP图像边缘检测处理
  • 434
分享到

C语言实现BMP图像边缘检测处理

2024-04-02 19:04:59 434人浏览 独家记忆
摘要

本文实例为大家分享了C语言实现BMP图像边缘检测处理的具体代码,供大家参考,具体内容如下 以Sobel算子为例,其余模板算子卷积代码部分同Sobel算子。如:高斯算子、拉普拉斯算子等

本文实例为大家分享了C语言实现BMP图像边缘检测处理的具体代码,供大家参考,具体内容如下

以Sobel算子为例,其余模板算子卷积代码部分同Sobel算子。如:高斯算子、拉普拉斯算子等


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
 
int main(int* arGC, char** argv)
{
 FILE* fp = fopen("./01.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("sobel.bmp", "wb");
 if (fop == 0)
  return 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) = *(pBmpBuf + i*lineByte + j);
  }
 }
 
 
 int ul, uc, ur, dl, dc, dr;
 int lu, lc, ld, ru, rc, rd;
 double hir, vec;
 for (int i = 1; i < height - 1; ++i){
  for (int j = 1; j < width - 1; ++j){
   // 垂直梯度算子:检测水平边缘
   vec = 0;
   ul = *(pBmpBuf + (i + 1)*lineByte + (j - 1))*(-1);
   uc = *(pBmpBuf + (i + 1)*lineByte + j)*(-2);
   ur = *(pBmpBuf + (i + 1)*lineByte + j)*(-1);
   dl = *(pBmpBuf + (i - 1)*lineByte + (j - 1)) * 1;
   dc = *(pBmpBuf + (i - 1)*lineByte + j) * 2;
   dr = *(pBmpBuf + (i - 1)*lineByte + j) * 1;
   vec = ul + uc + ur + dl + dc + dr;
   // 水平梯度算子:检测垂直边缘
   hir = 0;
   lu = *(pBmpBuf + (i + 1)*lineByte + (j - 1))*(-1);
   lc = *(pBmpBuf + (i - 0)*lineByte + (j - 1))*(-2);
   ld = *(pBmpBuf + (i - 1)*lineByte + (j - 1))*(-1);
   ru = *(pBmpBuf + (i + 1)*lineByte + (j + 1)) * 1;
   rc = *(pBmpBuf + (i - 0)*lineByte + (j + 1)) * 2;
   rd = *(pBmpBuf + (i - 1)*lineByte + (j + 1)) * 1;
   hir = lu + lc + ld + ru + rc + rd;
   *(pBmpBuf2+i*lineByte+j) = round(sqrt(hir*hir + vec*vec));
  }
 }
 
 fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fop);
 fwrite(&infoHead, sizeof(BITMAPINFOHEADER), 1, fop);
 fwrite(pColorTable, sizeof(RGBQUAD), 256, fop);
 fwrite(pBmpBuf2, lineByte*height, 1, fop);
 fclose(fop);
 
 system("pause");
 return 0;
}

实验结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现BMP图像边缘检测处理

本文链接: https://www.lsjlt.com/news/155359.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现BMP图像边缘检测处理
    本文实例为大家分享了C语言实现BMP图像边缘检测处理的具体代码,供大家参考,具体内容如下 以Sobel算子为例,其余模板算子卷积代码部分同Sobel算子。如:高斯算子、拉普拉斯算子等...
    99+
    2022-11-12
  • C++ opencv图像处理实现图片边缘检测示例
    目录边缘检测简介一、边缘检测步骤二、Canny1.函数2.代码二、Sobel1.函数2.代码三、Scharr1.函数2.代码四、Laplacian1.函数2.代码总结边缘检测简介 边...
    99+
    2022-11-13
  • python实现图像边缘检测
    本文实例为大家分享了python实现图像边缘检测的具体代码,供大家参考,具体内容如下 任务描述 背景 边缘检测是数字图像处理领域的一个常用技术,被广泛应用于图像特征提取、目标识别、计...
    99+
    2022-11-11
  • Matlab实现图像边缘检测
    为了在一幅图像 f 的(x,y)位置寻找边缘的强度和方向,所选择的工具就是梯度,梯度使用向量来表示: 该向量指出了图像 f 在位置(x,y)处的最大变化率的方向,梯度向量的大小表示...
    99+
    2022-11-12
  • C语言实现BMP图像细化处理
    细化(thinning)算法有很多,我们在这里介绍的是一种简单而且效果很好的算法,用它就能够实现从文本抽取骨架的功能。我们的对象是白纸黑字的文本,但在程序中为了处理的方便,还是采用 ...
    99+
    2022-11-12
  • C语言实现BMP图像闭运算处理
    闭运算可以把比结构元素小的特定图像细节出去,同时保证不产生全局的几何失真。填充比结构元素小的缺口或孔,搭接短的间断而起到连接作用。 运算:也就是先膨胀后腐蚀。 #include ...
    99+
    2022-11-12
  • C语言实现BMP图像开运算处理
    开运算可以把比结构元素小的特定图像细节出去,同时保证不产生全局的几何失真。滤掉比结构元素小的突刺,切断细长搭接而起到分离作用。 运算:用B开启A就是选出了A中某些与B相匹配的点,这些...
    99+
    2022-11-12
  • Python图像处理之边缘检测原理详解
    目录原理Sobel检测算子Laplacian算子算子比较原理 边缘检测是图像处理和计算机视觉当中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点,图像的边缘检测可以大幅度的...
    99+
    2022-12-08
    Python图像处理 边缘检测 Python边缘检测 Python图像处理
  • python数字图像处理之边缘轮廓检测
    目录引言1、查找轮廓(find_contours)2、逼近多边形曲线引言 在前面的python数字图像处理简单滤波 中,我们已经讲解了很多算子用来检测边缘,其中用得最多的c...
    99+
    2022-11-11
  • C语言实现BMP图像处理(直方图均衡化)
    本文实例为大家分享了C语言实现BMP图像直方图均衡化处理的具体代码,供大家参考,具体内容如下 计算步骤: 1)统计各灰度值的概率; 2)计算了累积概率直方图(CDF); 3)取整扩展...
    99+
    2022-11-12
  • C语言实现BMP图像处理(彩色图转灰度图)
    我们知道真彩图不带调色板,每个象素用 3 个字节,表示 R、G、B 三个分量。所以处理很简单,根据 R、G、B 的值求出 Y 值后,将 R、G、B 值都赋值成 Y,写入新图即可。 在...
    99+
    2022-11-12
  • C语言实现BMP图像处理(哈夫曼编码)
    哈夫曼(Huffman)编码是一种常用的压缩编码方法,是 Huffman 于 1952 年为压缩文本文件建立的。它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代...
    99+
    2022-11-12
  • Android+OpenCv4实现边缘检测及轮廓绘制出图像最大边缘
    实现步骤: 图像灰度化 边缘检测 根据Canny检测得出来的Mat寻找轮廓 算出最大轮廓周长or面积 根据获取到的最大轮廓下标进行轮廓绘制 ...
    99+
    2022-11-12
  • Python+OpenCV图像边缘检测四种实现方法
    目录1.Sobel算子2.Schaar算子(更能体现细节)3.Laplacian算子(基于零穿越的,二阶导数的0值点)4.Canny边缘检测(被认为是最优的边缘检测算法)总结 im...
    99+
    2022-11-12
  • Python利用OpenCV和skimage实现图像边缘检测
    目录一、简介二、opencv 实践三、skimage 实践一、简介 提取图片的边缘信息是底层数字图像处理的基本任务之一。边缘信息对进一步提取高层语义信息有很大的影响。大部分边缘检测算...
    99+
    2022-12-28
    Python OpenCV 图像边缘检测 Python skimage图像边缘检测 Python图像边缘检测
  • Python中图像边缘检测算法如何实现
    这篇“Python中图像边缘检测算法如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中图像边缘检测算法如何...
    99+
    2023-06-30
  • 详解Python中图像边缘检测算法的实现
    目录写在前面1.一阶微分算子1.1 Prewitt算子1.2 Sobel算子2.二阶微分算子2.1 Laplace算子2.2 LoG算子3.Canny边缘检测写在前面 从本节开始,计...
    99+
    2022-11-11
  • Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘
    这篇文章将为大家详细讲解有关Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现步骤:图像灰度化边缘检测根据Canny检测得出来的Mat...
    99+
    2023-06-15
  • C语言实现bmp图像平移操作
    平移变换是一种几何变换。平移的公式为:x1=x0+t,y1=y0+t,其中(x0,y0)是原图像中的坐标,(x1,y1)是经过平移变换后的对应点的坐标。 在编程中,先将处理后图像的所...
    99+
    2022-11-12
  • C语言实现BMP图像的读写功能
    C语言实现BMP图像的读写 对于刚接触数字图像的同学,应该都有一个疑问,如何把一个BMP格式的图像用纯C语言读入呢,我相信这也是数字图像处理的第一步,如果有幸看到这篇文档,我就有幸的...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作