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>


  1.  ifstream --從已有的文件讀
  2.  ofstream -- 向文件寫內容
  3.  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~~~






















留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題