讀取檔案(.txt、.excel、.csv),在c++、matlab環境中
阿新 • • 發佈:2019-01-28
1.開始時準備在vsat010下通過C++讀取Excel,需要 ole等 但方法總是配置不好。
2.最後做專案發現,對於excel檔案其實最好的處理方式是:用讀取.csv,
因為它們可以互相轉化只是在csv檔案中每個量直接由逗號隔開,也可以直接讀.。
在此程式碼栗子分享
待處理檔案 data.csv如下:
#image/照片ID,time/時間,latitude/緯度,longitude/經度,altitude/高程,roll/滾轉觿,pitch/俯仰觿,yaw/航向觿
1,2016/11/30 11:31,34.37583,112.83631,746.12,0.5,0.1,81.3
2,2016/11/30 11:31,34.37582,112.83741,744.66,-0.1,3.1,79.5
3,2016/11/30 11:31,34.37581,112.83848,743.45,0.5,7,80.3
4,2016/11/30 11:31,34.37581,112.83955,744.45,-0.7,6.7,80.8
實現程式碼
//// ReadCsv.cpp : 定義控制檯應用程式的入口點。 #include "stdafx.h" #include <opencv\highgui.h> #include <iostream> #include <string> #include <fstream> #include <opencv2/highgui/highgui.hpp> #define ExampleNum 114 //.csv檔案中樣本資料行數 using namespace std; using namespace cv; int main() { ifstream file("data.csv"); string data[ExampleNum+1][8]; string value; int row = 0; while (getline(file,value)) { //istream& getline (istream&& is, string& str); //讀取的istream是作為引數is傳進函式的。讀取的字串儲存在string型別的str中。 istringstream sin(value); //istringstream::istringstream(string str);它的作用是從string物件str中讀取字元。 string field; int col = 0; while (getline(sin, field, ',')) { data[row][col] = field; col = col + 1; } cout << data[row][0] << "\t" << data[row][1] << "\t" << data[row][2] <<"\t"<< data[row][3] <<"\t"<< data[row][4] << "\t" << data[row][5] <<"\t" << data[row][6] << "\t" << data[row][7] <<"\t"<<endl; row = row + 1; } waitKey(0); return 0; }
3.之後有個將Excel轉換成轉成 .txt 讀取的想法通過c++讀取,也可以走得通,可參考點選開啟連結
最後我自己寫了一些程式碼可以參考,舉個例子說明,這裡有待處理檔案.txt
xiaoming;123456;shanghai
zhangming;123;shangdong
hanmeimei;987;beijing
處理程式碼
strtok() 函式可以對各種分隔符進行分隔變數//本例中是對;#include<iostream> #include<stdio.h> #include<string> using namespace std; int main(int argc,char **argv) { string strname,strid,straddress; char buff[256]; FILE *p; p=fopen("data.txt","r"); while(fgets(buff,256,p)!=NULL) { strname=strtok(buff,";");//這裡要注意的是一行文字中在第一次使用strtok的時候,第一個引數要使用待處理資料的首地址 strid=strtok(NULL,";");//但是在該行的以後使用中第一個引數就要用NULL,這一點很重要,往往被人忽視 straddress=strtok(NULL,"\n");//更加要注意的一點是,在分割該行最後一個屬性的時候,很多人對於分隔符的選取仍然是" "(空格),這樣是不正確的,應該使用"\n"來分割,因為最後的符號是"\n"而不是空格,如果繼續使用空格作為分隔符的話,那麼最後一個屬性就多了一個"\n"了。 cout<<strname<<" "<<strid<<" "<<straddress<<endl; } return 0; }
4.最後考慮圖片的讀取最好在matlab下處理,結果非常好的,得到了解決以下是我的程式碼,可以選擇匯入我提供的檔案
扣完圖片儲存在matlab工作目錄下
clc
clear
%%%%%5 %%呼叫格式:
%{
截圖函式
I2=imcrop(I,RECT);
X2=imcrop(X,MAP,RECT);
RGB2=imcrop(RGB,RECT);
其中,I、X、RGB分別對應灰度影象、索引影象、RGB影象的資料矩陣,MAP為索引影象
顏色表,I2、X2、RGB2分別為各自輸入矩陣所對應的輸出矩陣。而RECT為可選引數,
格式為[XMIN YMIN WIGTH HEIGHT].例如[20 20 40 40],則剪裁後的影象的左上
角畫素為原影象位置在(20,20)的畫素,而剪裁後圖像的右下角畫素為原影象位置
在(60,60)的畫素。另外,如不加引數RECT,將使用滑鼠在原影象上劃矩形框的方
法來實現影象的剪裁,所劃矩形框內的影象將在新視窗中輸出。
如:
RGB=imread('1,jpg');
RGB1=imcrop(RGB,[60,255,400,425]);
imhsow(RGB);
figure
imshow(RGB1);
%}
%開始通過彈出檔案選擇框選擇excel檔案,讀入資料,如讀入我提供的檔案005
%彈出選擇excel檔案窗,選擇檔案
[filename, pathname] = uigetfile({'*.xls;*.xlsx;', 'EXCEL 檔案 (*.xls, *.xlsx)'},'匯入檔案');
str = [pathname,filename];
data = xlsread(str);
[num ,ixi, raw]=xlsread(str);
num
[num_x,num_y]=size(num)
list=dir([pathname,'*.jpg']);
k=length(list)
for j=1:k
%str_img= strcat (pathname, int2str(i) , '.jpg') ; % 連線字串形成影象的檔名
str_img= strcat (pathname, list(j).name)
a{j}=imread(str_img);
%img=imread([pathname,'001.jpg']);
end
%在當前work directory下建立image資料夾% //如果資料夾已存在,會提示warning,執行無礙
mkdir 066
directory=[cd,'/066/'];
%扣取指定位置的區域圖片
switch (num(1,2))
case 1
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
end
case 2
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);
imwrite(img2,[directory,num2str(i),'12.jpg'])
end
case 3
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);
imwrite(img2,[directory,num2str(i),'12.jpg'])
img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);
imwrite(img3,[directory,num2str(i),'13.jpg'])
end
case 4
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);
imwrite(img2,[directory,num2str(i),'12.jpg'])
img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);
imwrite(img3,[directory,num2str(i),'13.jpg'])
img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);
imwrite(img4,[directory,num2str(i),'14.jpg']);
end
case 5
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);
imwrite(img2,[directory,num2str(i),'12.jpg'])
img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);
imwrite(img3,[directory,num2str(i),'13.jpg'])
img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);
imwrite(img4,[directory,num2str(i),'14.jpg']);
img5=imcrop(a{i},[num(i,34),num(i,35),num(i,36),num(i,37)]);
imwrite(img5,[directory,num2str(i),'15.jpg'])
end
case 6
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);
imwrite(img2,[directory,num2str(i),'12.jpg'])
img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);
imwrite(img3,[directory,num2str(i),'13.jpg'])
img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);
imwrite(img4,[directory,num2str(i),'14.jpg']);
img5=imcrop(a{i},[num(i,34),num(i,35),num(i,36),num(i,37)]);
imwrite(img5,[directory,num2str(i),'15.jpg'])
img6=imcrop(a{i},[num(i,41),num(i,42),num(i,43),num(i,44)]);
imwrite(img6,[directory,num2str(i),'16.jpg']);
end
case 7
for i=1:k
img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);
imwrite(img1,[directory,num2str(i),'11.jpg'])
img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);
imwrite(img2,[directory,num2str(i),'12.jpg'])
img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);
imwrite(img3,[directory,num2str(i),'13.jpg'])
img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);
imwrite(img4,[directory,num2str(i),'14.jpg']);
img5=imcrop(a{i},[num(i,34),num(i,35),num(i,36),num(i,37)]);
imwrite(img5,[directory,num2str(i),'15.jpg'])
img6=imcrop(a{i},[num(i,41),num(i,42),num(i,43),num(i,44)]);
imwrite(img6,[directory,num2str(i),'16.jpg']);
img7=imcrop(a{i},[num(i,48),num(i,49),num(i,50),num(i,51)]);
imwrite(img7,[directory,num2str(i),'17.jpg']);
end
end