最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)BMP圖像閉運算處理

 更新時間:2021年10月25日 11:43:52   作者:傻不拉幾的程序員  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)BMP圖像閉運算處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

閉運算可以把比結構元素小的特定圖像細節(jié)出去,同時保證不產(chǎn)生全局的幾何失真。填充比結構元素小的缺口或孔,搭接短的間斷而起到連接作用。

運算:也就是先膨脹后腐蝕。

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
 
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;       // 當前點
   }
  }
 }
 // 結構元素向上反轉(zhuǎn)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;       // 當前點
  }
 }
 // 結構元素向右反轉(zhuǎn),對最右邊一列處理
 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;
}

實驗結果:

         

實驗結果分析:原圖和效果圖略微由區(qū)別。但效果圖似乎和開運算相反了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 堆基本操作實現(xiàn)最大堆

    堆基本操作實現(xiàn)最大堆

    這篇文章主要介紹了堆基本操作實現(xiàn)最大堆,需要的朋友可以參考下
    2014-02-02
  • 詳解C++ string常用截取字符串方法

    詳解C++ string常用截取字符串方法

    這篇文章主要介紹了C++ string常用截取字符串方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • C++中malloc與free、new與delete的詳解與應用

    C++中malloc與free、new與delete的詳解與應用

    今天小編就為大家分享一篇關于C++中malloc與free、new與delete的詳解與應用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言實現(xiàn)簡易網(wǎng)絡聊天室

    C語言實現(xiàn)簡易網(wǎng)絡聊天室

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易網(wǎng)絡聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Qt兩種定時器使用實現(xiàn)方式

    Qt兩種定時器使用實現(xiàn)方式

    這篇文章主要給大家介紹了關于Qt兩種定時器使用實現(xiàn)方式的相關資料,Qt中的定時器類是QTimer,QTimer不是一個可見的界面組件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • C語言單鏈表貪吃蛇小游戲

    C語言單鏈表貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了C語言單鏈表貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言的數(shù)字游戲算法效率問題探討實例

    C語言的數(shù)字游戲算法效率問題探討實例

    這篇文章主要介紹了C語言的數(shù)字游戲算法效率問題探討實例,需要的朋友可以參考下
    2014-04-04
  • C語言 CRITICAL_SECTION用法案例詳解

    C語言 CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了C語言 CRITICAL_SECTION用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++算法學習之分支限界法的應用

    C++算法學習之分支限界法的應用

    分支限界法常以廣度優(yōu)先或以最小耗費(最大效益)優(yōu)先的方式搜索問題的解空間樹。本文將詳細講解分支限界法的應用,需要的可以參考一下
    2022-05-05
  • C語言深入詳解四大內(nèi)存函數(shù)的使用

    C語言深入詳解四大內(nèi)存函數(shù)的使用

    這篇文章主要介紹了C語言的四大內(nèi)存函數(shù),講解了mencpy、memmove、memcmp、memset函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-07-07

最新評論

拉萨市| 荣昌县| 永靖县| 泾源县| 宁津县| 呼玛县| 滨海县| 罗江县| 浦城县| 望江县| 嫩江县| 桐城市| 泰宁县| 和顺县| 开阳县| 鄂伦春自治旗| 海城市| 仁怀市| 额尔古纳市| 秦皇岛市| 个旧市| 枝江市| 沙雅县| 宁波市| 中西区| 大宁县| 阳朔县| 南郑县| 漳浦县| 平江县| 通海县| 永和县| 高密市| 武乡县| 舞钢市| 宁南县| 临城县| 固阳县| 穆棱市| 红安县| 祁东县|