1. 程式人生 > >批量讀取圖片儲存為csv檔案

批量讀取圖片儲存為csv檔案

  • 工具

採取QT5.6.1+opencv2.4.9
本文以實現將手寫數字圖片轉化為csv檔案列子

  • 實現思路:
    -1.將手寫數字以分類在不同資料夾中(0-9)如下圖所示:這裡寫圖片描述
    -2.將所有圖片的路徑載入到txt檔案中dir /b/s *.png > image.txt;生成的txt檔案如下圖:這裡寫圖片描述
    -3.創立QFile csvFile(FILE_PATH),FILE_PATH為最終生產的csv檔案的路徑位置;
    開啟:csvFile.open(QIODevice::ReadWrite)
    這裡需要用ifstream進行檔案流讀取
  ifstream getNamelist(picTXTtoute)
;//picTXTtoute:為image.txt的位置(string) while(getline(getNamelist,ImgName))//讀入txt的一行到ImgName,從而獲取了第一幅圖片的路徑,反覆讀取,則實現了對圖片的批量處理。

-4我們以每類圖片所在資料夾的名字作為其標籤(label),為了使生產的csv檔案為(標籤+畫素值 畫素值 畫素值….)的結構我們現在需要獲取每個ImgName的第56位字元,即(0-9),我們可以用以下句法實現

  QString Dirroute =QString::fromStdString(ImgName);//為了得到標籤(所以對與資料夾和圖片的命名要有規律)
QString Midroute = Dirroute.mid(56,1);//標籤位置 Midroute.append(",");//為轉換為csv檔案加“,”只要不是圖片的最後一個畫素那都是(畫素值,)結構,最後一個畫素那就是(畫素值\n)結構;

注意在將(畫素值,)(畫素值\n)寫入csvFile中的時候,我們需要Midroute轉換為哦ascii碼,在QT中用下面的語句實現

csvFile.write(Midroute.toLatin1());//這個是QFile::write()型別必須的,QString轉換為ascii的句法。

至此我們已經將第一幅圖片的標籤寫入了csv檔案中,如下圖綠色框選的位置
這裡寫圖片描述


-5我們在進行圖片畫素的寫入之前,我們需要知道幾個小知識點,第一:我們的圖片是三通道的,即一個畫素點需要用三個畫素值表示,在我們得到圖片的rows和cols的之後,我們要將其儲存的1*N的矩陣中,這個N不是rows*cols 而是rows*cols*3;
第二:本文用at去訪問畫素點,所以我們要提前知道Mat的資料型別,這裡我們的圖片Mat型別是uchar,uchar c = image.at(i,j);第二:用at訪問的時候,image.at(i,j)實際訪問的是(j,i)畫素點的值;第三:為了在讀取後的畫素值後面加上“,”或者“\n”我們需要用到下面的知識點:

QString i = "iTest";           // current file's number  
QString total = "totalTest";       // number of files to process  
QString fileName = "fileNameTest";    // current file's name  

QString status = QString("Processing file %1 of %2: %3")  
                .arg(i).arg(total).arg(fileName);  

記住最後QString要抓還為ascii才能寫入csv;
-6最後,要用csvFile.close();結束csv檔案操作

下面上程式碼:
.cpp

void ImagePreprocessing::writeImageToCSV(string picTXTtoute)
{
    QString str;
    QFile csvFile(FILE_PATH);//建立QFile物件 csvFile,File_PATH為csvFile檔案儲存的路徑及型別
    Mat inputImage;//接受從txt檔案讀入路徑的圖片
    string ImgName; //接受從txt檔案中讀入圖片的路徑
    int rows,cols;
    ifstream getNamelist(picTXTtoute);//讀取儲存了圖片路徑和格式的txt文件
    if(csvFile.open(QIODevice::ReadWrite))//開啟檔案,進行操作
    {
        while(getline(getNamelist,ImgName))//讀入一行,\n為結束符
        {
            QString Dirroute =QString::fromStdString(ImgName);//為了得到標籤(所以對與資料夾和圖片的命名要有規律)
            QString Midroute = Dirroute.mid(56,1);//標籤位置
            Midroute.append(",");//為轉換為csv檔案加“,”

            csvFile.write(Midroute.toLatin1());//這個是QFile::write()型別必須的,QString轉換為ascii的句法。寫在沒個圖片的前面,作為標籤號
            //            qDebug() << Midroute;
            //        cout<< ImgName <<endl; //路徑輸出
            inputImage = imread(ImgName);
            if(!inputImage.data)//異常退出
                return;
            rows = inputImage.rows;
            cols = inputImage.cols;
            int flagNum = rows * cols * 3;
            int countNum = 0;
            //            cout << flagNum << endl;
            for(int i = 0; i <rows; i++)//把衣服圖片轉換為N*1的矩陣。
            {
                for(int j = 0; j< cols * 3; j++)
                {
                    countNum++;
                    uchar c = inputImage.at<uchar>(i,j);//用at操作,事前就要知道Mat中資料儲存型別,uchar,flaot,或者其他。
                    if(countNum == flagNum)
                    {
                        str = QString("%1\n").arg(c);//最後一個畫素,在後面新增\n作為行結束符號
                        //                        qDebug() << str;
                    }
                    else
                        str = QString("%1,").arg(c);//非最後一個畫素值,則用逗號,隔開資料。
                    csvFile.write(str.toLatin1());//csvFile。write()遇到\n則會換行進行寫,遇到的是“,”則繼續在逗號後面寫入資料
                    //                                   qDebug() << str;
                }
            }
        }
    }
    csvFile.close();//寫完以後記住要關閉csv檔案,正常結束
    return;
}

相關推薦

批量讀取圖片儲存csv檔案

工具 採取QT5.6.1+opencv2.4.9 本文以實現將手寫數字圖片轉化為csv檔案列子 實現思路: -1.將手寫數字以分類在不同資料夾中(0-9)如下圖所示: -2.將所有圖片的路徑載入到txt檔案中dir /b/s *.png >

批量圖片儲存mat檔案 -- MATLAB

matlab實現批量圖片向mat轉換,對應大量資料集圖片處理異常重要 clc; clear all; num = 1000; %圖片數量 for i = 1 : num    IMAGE = imread(sprintf('G:\\TEST\\%.jpg'

爬蟲資料儲存csv檔案時,表格中間隔有空行問題

問題描述:將爬取的資料儲存的csv檔案,遇到幾個問題,原始碼如下: with open('F:\\Pythontest1\\douban.csv','w') as f: writer = csv.writer(f,dialect='excel') writer.writero

C#將資料儲存CSV檔案格式

/// 將資料以CSV格式儲存 /// ",表示移動到同一行的下一格" /// "\r\n"表示移動到下一列 /// </summary> /// <param name="sender"></pa

幾行Python程式碼生成飯店營業額模擬資料並儲存CSV檔案

CSV檔案是一種通用的、簡單的檔案格式,以純文字形式儲存表格資料(數字和文字),在多個領域都有廣泛應用,經常用來在不同程式之間交換資料。 下面的程式碼使用Python標準庫datetime和random生成資料模擬一個飯店的銷量,然後使用標準庫csv寫入CSV檔案。可以調整程式中的數字,生成更多符合要求的資

python 怎樣把一個數組型別資料儲存csv檔案

有時候做完一個案例的分析,模型做好了,最後想把預測的結果儲存為CSV檔案。這個預測的結果一般是n行1列的一個數列,我們最後就是想把預測結果儲存下來。submission = clf.predict(credit_test)#submission是我的預測結果,是一個5000*

scrapy爬蟲儲存csv檔案的技術分析

由於工作需要,將爬蟲的檔案要儲存為csv,以前只是儲存為json,但是目前網上很多方法都行不通,主要有一下兩種: from scrapy import signals from scrapy.contrib.exporter import CsvItemExporter

MATLAB中批量從txt檔案讀取指定行的資料儲存txt檔案

經常遇到,我們想要讀取的資料,不是從頭開始讀取的,我們往往要求從固定的行開始讀取,MATLAB程式碼如下: function readData() %從指定行開始讀取資料 readFilePat

tensorflow將圖片儲存tfrecord和tfrecord的讀取

tensorflow官方提供了3種方法來讀取資料: 預載入資料(preloaded data):在TensorFlow圖中定義常量或變數來儲存所有的資料,適用於資料量不太大的情況。 填充資料(feeding):通過Python產生資料,然後再把資料填充到後端。 從檔案讀取資

opencv+vs2017實現視訊的讀取及播放,同時將每一幀圖片儲存在指定檔案

#include "highgui.h" #include <iostream> using namespace std; int main(int argc, char** argv) { cvNamedWindow("視訊播放器", CV_WINDOW_A

nrrd格式用Python讀取儲存png圖片

安裝pynrrd pip install pynrrd pip install git+https://github.com/mhe/pynrrd.git cd pynrrd pip install . 如果報錯了,則輸入 python setup.py install 注意:

python儲存身份證號碼csv檔案顯示問題解決

用python處理含身份證號碼的文字檔案,將其另外儲存為csv檔案,該csv檔案使用wps開啟顯示身份證號碼後面三位數變為0,解決的辦法是:身份證號碼前加'\t',例如下面程式碼: origine_file = r"C:\Files\名單.txt" save_to = "C:\Fil

Python - pyecharts:直接將圖片儲存 png, pdf, gif 格式的檔案

關鍵:使用 pyecharts-snapshot外掛 第一步:安裝node.js 第二步:安裝phantomjs 命令列中輸入: npm install -g phantomjs-prebuilt 安裝完成後檢查是否成功,命令列輸入: phantomjs 第三

php wangeditor編輯器,base64圖片儲存檔案

php 字串圖片轉為檔案儲存 /** * 編輯器base64_decode圖片匹配 * * @author Eric * @param $str

opencv中批量讀取圖片儲存

在生成訓練集的時通常需要對資料夾中圖片進行批處理,本文簡要介紹影象批量讀取、處理、儲存的方法。 方法一: 1.生成圖片描述檔案     對於有多幅影象的資料夾,首先生成txt檔案,儲存圖片路徑。    在DOS模式下匯入資料夾路徑並生成TXT檔案: 2.通過TXT批

oracle ebs + PL/SQL實現將查詢出來的資料儲存csv格式檔案,並定期上傳到FTP伺服器學習總結

目的 oracle ebs + PL/SQL實現將查詢出來的資料儲存為csv格式檔案,並定期上傳到FTP伺服器。 用到oracle utl_file包,FTP檔案上傳 第一次接觸這種型別的任務,也是在網上查詢了很多參考資料才弄出來。 下面是具體的例子。

=讀取日誌檔案,正則表示式匹配出有用資訊,並且儲存csv檔案

//版本1 import java.io.BufferedReader;   import java.io.BufferedWriter; import java.io.File;   import java.io.FileReader;   import java.io.

單個爬蟲檔案使用scrapy儲存csv格式

import scrapy class StackOverflowSpider(scrapy.Spider): name = "stackoverflow" start_urls=["http://stackoverflow.com/questions?sort=vo

運用python將json檔案儲存csv檔案

工具:  spyder ,codecs  ,pandas # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ #-*-coding:utf-8-*- import j

linux終端儲存文字檔案

1. 只儲存一個命令的結果時候 ls>ls.txt 會覆蓋檔案原有內容 ls>>ls.txt 會新增到檔案末尾 2. tee 命令 ls | tee ls.txt 會覆蓋檔案原有內容 ls | tee -a ls.txt 會新增到檔案末尾