opencv_如何存取影像資訊
可清楚看到 RGB 值 為 (255,0.0)
我們現在要試著練習把這些值存到txt當中
這裡介紹一個好朋友 叫做 ofstream
cplusplus
參考連結: http://www.cplusplus.com/reference/fstream/ofstream/ofstream/
一般我們習慣使用open()來開啟檔案串流,使用get()或put()來進行輸出入
這是 C語言 的作法
在C++中,可以直接操作串流來進行檔案的輸出入。
不必使用open()來開啟串流
ifstream、ofstream 和 fstream 都有建構函式,可以直接指定檔案並開啟串流
需要包含的頭文件: <fstream>
- ifstream --從已有的文件讀
- ofstream -- 向文件寫內容
- fstream - 打開文件供讀寫
語法:
ifstream file2("c:\\pdos.def"); //以輸入方式打開文件
ofstream file3("c:\\x.123"); //以輸出方式打開文件
【程式碼】
#include<stdio.h>
#include<iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<fstream>
using namespace cv;
using namespace std;
int main(int, char**)
{
IplImage *img = cvLoadImage("C:\\img_res\\red.jpg", 1);
ofstream fout("C:\\img_res\\info_of_photo.txt"); // 在此目錄 以輸出方式開啟文件
CvScalar s;//存取BGR 數值 結構體
cout << "\n 開始保存\n";
int q = 0;
for (int i = 0; i<img->height; i++)
{
for (int j = 0; j<img->width; j++)
{
s = cvGet2D(img, i, j); //獲取src影像中坐標為(i,j)的pixel value
//s.val[0] 代表src圖像BGR中的B通道value~
fout << s.val[0];//B
fout << "\t";
fout << s.val[1];//G
fout << "\t";
fout << s.val[2];//R
fout << "\t";
cvSet2D(img, i, j, s); //set the (i,j) pixel value
q++; // 會遍歷總pixel數
}
}
cout << "\n 保存完畢! \n";
cout << "矩陣一共有" << q << "px" << '\n';
system("PAUSE");
return 0;
}
效果 成功存取了 pixel值 ya~~~
留言
張貼留言