반응형



OpenCV에서 바이너리 이미지로 변환한 후, 텍스트 파일로 저장하는 방법을 다룹니다.

이후 엑셀에서 불러와 한 셀에 하나의 픽셀값이 들어가도록 합니다.


다음 이미지를 입력으로 해서 OpenCV를 사용하여 얻은 텍스트 파일입니다.





엑셀에서 해당 텍스트 파일을 불러온 후, 너비가 일정함을 선택하고 마침 버튼을 클릭합니다.




엑셀의 셀마다 하나의 픽셀값이 저장됩니다.







파이썬과 C++로 구현한 코드입니다.



Python


import cv2 as cv


img_color = cv.imread('box_small.png', cv.IMREAD_COLOR)
img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)
ret, img_binary = cv.threshold(img_gray, 150, 255, cv.THRESH_BINARY)


height,width = img_binary.shape[:2]

f = open('image.txt', 'w')

for y in range(height):
   for x in range(width):
       print("%3d"%img_binary[y,x], end=" ")
       f.write("%3d " % img_binary[y,x])
   print("")
   f.write("\n")

f.close()
cv.imshow("Binary", img_binary)
cv.waitKey(0)



C++


#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>

using namespace cv;
using namespace std;


int main()
{
Mat img_color, img_gray, img_binary;

img_color = imread("box_small.png", IMREAD_COLOR);
cvtColor(img_color, img_gray, COLOR_BGR2GRAY);
threshold(img_gray, img_binary, 150, 255, THRESH_BINARY);

int height = img_binary.rows;
int width = img_binary.cols;

FILE * pFile = fopen("image.txt", "w");

for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
printf("%3d ", img_binary.at<uchar>(y, x));
fprintf(pFile, "%3d ", img_binary.at<uchar>(y, x));
}
printf("\n");
fprintf(pFile, "\n");

}

fclose(pFile);

imshow("Binary", img_binary);
waitKey(0);
}



최초작성 2019. 1. 28




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts