2014-07-14 3 views
0

채널 중 하나의 배열 데이터를 텍스트 파일에 쓰고 싶습니다. 내가 어떻게 해? 배열 데이터를 opencv의 텍스트 파일에 쓰기

나는이

Mat img = imread("dog.jpg", 1); 

std::ofstream fout("myfile.txt"); 

fout << img.at<Vec3b>(i, j); 

을 시도했지만 모두 3 개 채널의 데이터를 복사합니다. 한 채널의 데이터 만 저장하려고합니다. B [] []라고 말하면됩니다. 그림과 같이 R [] [], G [] [], B [] []에 모든 채널의 데이터를 별도로 저장했다고 가정합니다.

Vec3b intensity = img.at<Vec3b>(i, j); 

B[j][i]=intensity[0]; 
G[j][i] = intensity[1]; 
R[j][i] = intensity[2]; 

fout << ??????????????????????; //want to store data of Blue channel 
+0

방법이 데이터를 저장할 수 있습니까? 바이너리 데이터를 저장하고 싶지만 약간 혼란스러운''myfile.txt ''를 사용하고있는 것 같습니다. 데이터의 원하는 파일 형식은 무엇입니까? – Scis

+0

uchar 데이터를 텍스트 파일에 저장하려고합니다. – Navdeep

+0

나는 또한 size = sizeof (B)를 시도했다; \t \t file = fopen ("myfile.txt", "wt"); \t int bytes_read = fwrite (B, sizeof (unsigned char), size, file); \t fclose (file); – Navdeep

답변

2

이 시도 :

Mat img = imread("d:\\ImagesForTest\\cat.jpg", 1); 
std::ofstream fout("myfile.txt"); 
vector<Mat> ch; 
cv::split(img,ch); 

    // Possible formatters 
    // -------------------------- 
    // (matlab)  Formatter::FMT_MATLAB 
    // (python)  Formatter::FMT_PYTHON 
    // (numpy)  Formatter::FMT_NUMPY 
    // (csv)   Formatter::FMT_CSV 
    // (c)   Formatter::FMT_C 

fout << format(ch[0], Formatter::FMT_CSV); // Blue 
fout << format(ch[1], Formatter::FMT_CSV); // Green 
fout << format(ch[2], Formatter::FMT_CSV); // Red 
+0

Andrey 당신이 말한 것은 맞습니다.하지만 먼저 특정 채널의 데이터를 uchar 배열에 저장 한 다음 값을 반전하는 것과 같은 작업을 수행 한 후에 반전 된 값을 파일에 저장하려고합니다. 위한 – Navdeep

+0

(; 나는 (i, j); \t \t \t G [j] [i] = 255-G [j] [i]; \t \t \t \t \t}가 \t \t} I 위와 같이 시도 지금은 G [J]의 값을 저장할 [I]는 파일하지만 FOUT 할 때 << G; 몇 가지 이진 정보를 저장하지만 값을 텍스트로 저장하려고합니다. 설명 해주십시오. – Navdeep

+0

처리를 행렬에 적용하고 결과를 행렬로 가져올 수 있습니다. char 배열을 사용하지 말고 행렬을 대신 사용하십시오. –