C++ fstream讀取bmp影象
以前都是使C語言中File* 、fopen、fread等操作檔案,這幾天學習了C++ IO標準庫,就應用來讀取bmp影象。
#include "stdafx.h" #include <fstream> # include <windows.h> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int _tmain(int argc, _TCHAR* argv[]) { BITMAPFILEHEADER fh; BITMAPINFOHEADER ih; int rows, cols; Mat showImg; ifstream src("2.bmp", ifstream::binary); //2.bmp為灰度影象 if (!src) { cerr << "開啟失敗"; return -1; } src.read((char *)&fh, sizeof(BITMAPFILEHEADER)); if (fh.bfType != 'MB') { cerr << "這不是BMP影象"; return -1; } src.read((char *)&ih, sizeof(BITMAPINFOHEADER)); rows = ih.biHeight; cols = ih.biWidth; //bmp影象資料儲存是4位元組對齊的 int colsDQ = (cols + 3) / 4 * 4; //移動到影象資料處 src.seekg(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD) * 256, ios::beg);//引數:相對位置,起點 showImg = Mat::zeros(rows, cols, CV_8U); //讀取影象資料 uchar *pData = new uchar[rows*colsDQ]; src.read((char *)pData, rows*colsDQ); //bmp影象資料轉換到Mat影象資料(Mat影象資料非對齊) for (int i = rows - 1; i >= 0; --i) //bmp影象儲存為行倒序 for (int j = 0; j < cols; ++j) { showImg.ptr<uchar>(rows - 1 - i)[j] = *(pData + i*colsDQ + j); } delete[]pData; imshow("hi", showImg); waitKey(); return 0; }
參考:
相關推薦
C++ fstream讀取bmp影象
以前都是使C語言中File* 、fopen、fread等操作檔案,這幾天學習了C++ IO標準庫,就應用來讀取bmp影象。 #include "stdafx.h" #include <fstream> # include <windows.h> #
C語言讀取BMP數字影象
// 資料型別說明: // WORD:16位無符號短整形,佔2個位元組 // DWORD:32位無符號短整形,佔4個位元組 // LONG:有符號32位整形,佔4個位元組 // RGBQUAD:用於定義調色盤陣列元素的型別 // LPBITMAPINFOHEADER:點陣圖資
C語言實現BMP影象旋轉
實現影象旋轉,首先要對影象的儲存,影象的讀寫比較清楚,在此基礎上進行線性變換。以下程式碼為逆時針旋轉90度,後續會給出旋轉任意角度的程式碼: 核心還是掌握旋轉時的前後變換。變換的過程可以歸結為:首先將影象座標變換為數學座標,然後在數學座標上進行變換,然後在進行逆變換,得到在影象座
C語言實現BMP影象旋轉(任意角度)
實現對對任意角度的旋轉,具體數學推導網上找。如果各位讀者需要使用,只需要將開啟檔案的位置改為你的位置,輸入不同的角度即可: #include <Windows.h> #include <stdio.h> #include <stdlib.h> #incl
C語言實現BMP影象縮放
對BMP影象用C語言實現影象的縮放。縮放的倍數通過輸入設定 #include <Windows.h> #include <stdlib.h> #include <stdio.h> #include <math.h> int main(int
C語言讀取BMP檔案(同時支援Linux和Windows)
C語言讀取BMP檔案最關鍵的是要理解結構體對齊。一般情況下,C語言的結構體在記憶體中會按照4位元組(32位)或者8位元組(64位)對齊。BMP檔案的資料頭結構體按照位元組排列,而且不能對齊,所以需要用預編譯巨集設定不能對齊。 另外注意Linux下一般用UTF-8編碼,但是Windows下用GB2
讀取BMP影象每一畫素點RGB資料
對於24位bmp圖片,每一個畫素點存放著此點的RGB值。首先定義一個結構體,包含紅(red)、綠(green)、藍(blue)這三個欄位,如下: //畫素顏色值 typedef struct tagPOINT{ BYTE b; BYTE g; BYTE
運用opencv 讀取BMP影象畫素資訊 程式碼及實現
1. 環境:Win7(64位),opencv2.3,vs2010 2.程式碼: /////////////////////////////////////////////////////////////////////////////////////////////////
【數字影象處理】C++讀取、旋轉和儲存bmp影象檔案程式設計實現
通過我這些天用C++讀寫bmp影象的經歷,摸索再摸索,終於對bmp檔案的結構、操作有了一定的瞭解,下面就大概介紹bmp圖片純C++的讀取、旋轉和儲存的實現過程。 有幾點需要注意的是: 在讀取bmp圖片的時候,一定要注意記憶體對齊的問題,譬如檔案頭,否則無法讀取出正確結果。
24位bmp影象的資料讀取&儲存
24位bmp檔案的讀取&儲存 我採用的方法是將影象檔案讀取,儲存到一維陣列中,以便後期的操作。 void checkFileExist(FILE * fpbmp) { //開啟圖片檔案 按照二進位制讀取
C++——bmp影象裁剪
在之前的部落格中,我們已經實現了bmp影象的讀取與儲存,本文在之前的基礎上對對人影象的資料區進行處理,達到擷取影象部分割槽域的目的,以便以後的影象處理操作,程式碼如下:#include <string.h> #include <malloc.h
C++——bmp影象灰度化+二值化
本文實現bmp影象的灰度化及二值化操作:1、灰度化 對於彩色轉灰度,有一個很著名的心理學公式: Gray = R*0.299 + G*0.587 + B*0.114而實際應用時,希望避免低速的浮點運算,所以需要整數
BMP影象的讀取和生成
1. BMP.h #ifndef _BMP_H_ #define _BMP_H_ #ifdef __cplusplus extern "C" { #endif typedef enum _BIT_DATA_TYPE_{ B
讀取24位 BMP 影象並生成 JPG 縮圖(一)
//對24位BMP進行解析 if(nbitcount==24){ int npad=(nsizeimage/nheight)-nwidth*3; int ndata[]=new int[nheight*nwidth]; byte
android上用C語言讀取fb0實現截圖,並儲存為rgb565的bmp
好久沒有看,這兩天在折騰一下,更新一下:修正了framebuffer bgra_8888格式截圖變紅的問題 ================================= android上用C語言讀取fb0實現截圖,儲存為bmp圖片, 支援16位
BMP影象的灰度化---C++實現
灰度圖的結構主要包括檔案頭,BMP資訊頭,調色盤,BMP資料內容四部分。灰度圖的調色盤共有256項RGBQUAD結構,存放0到255的灰度值,每一項rgbRed、rgbGreen、rgbBlue分量值相等。 24位真彩BMP影象的灰度化 把24位真彩BMP影象
c++讀取bmp圖片詳解
先介紹幾個會用到的函式。 1、FILE * fopen(const char * path,const char * mode); path是字串型別的bmp圖片路徑;mode讀取方式,等下回用到"rb",讀寫開啟一個二進位制檔案,允許讀寫資料,檔案必須存在。 2、int
C++——bmp影象的平滑、銳化(拉普拉斯+sobel+prewitt+Roberts Cross operator)
本文實現了RGB三通道影象及灰度影象的平滑、銳化處理。在開始之前,我們先對平滑及銳化的概念進行一個簡單的瞭解:1、平滑 影象平滑是指受感測器和大氣等因素的影響,遙感影象上會出現某些亮度變化過大的區域,或出現一些亮點(也稱噪聲)。這種為了抑制噪聲,使影象亮度趨於平緩
C++fstream,ifstream和outstream讀取檔案最後一行注意
char cntext[1024] = {0}; fstream cnText("E:\\Work\\Diagnose\\Chrysler\\BAIC\\CN_TEXT.txt"); //cnText.open(("E:\\Work\\Diagnose\\Chrysle
實現影象格式的轉換程式碼 C語言實現 RGB565轉BMP影象
這是我從網上看到的寶貴資料,可以直接實現RGB565 轉BMP影象的實現。我是用的開發板mini2440的開發板,和配套的攝像頭CAM130,實際上CAM130用的是OV9650的一款攝像頭;拍出的照片為RGB565的格式,因為這種格式直接可以送到 TFT螢幕上直接顯示;