반응형



imwrite 함수로 저장하면 바이너리 이미지라도 그레이스케일(8비트 1채널) 이미지로 저장됩니다.








imwrite 사용시 IMWRITE_PNG_BILEVEL 옵션을 추가해주면 1비트 1채널 이미지로 저장할 수 있습니다.

1비트 이기 때문에  0과 1 두가지만 표현가능합니다.  png 확장자를 가지는 이미지만 가능합니다.





다음은 Python과 C++구현한 코드입니다.



Python


import cv2 as cv


img_color = cv.imread('test.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)


cv.imwrite('1bit_image.png' ,img_binary, [cv.IMWRITE_PNG_BILEVEL, 1])
cv.imwrite('8bit_image.png' ,img_binary)

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




C++


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

using namespace cv;
using namespace std;


int main()
{
Mat img_color, img_gray, img_binary;
img_color = imread("test.png", IMREAD_COLOR);
cvtColor(img_color, img_gray, COLOR_BGR2GRAY);
threshold(img_gray, img_binary, 150, 255, THRESH_BINARY);

vector<int> params;
params.push_back(IMWRITE_PNG_BILEVEL);
params.push_back(1);
imwrite("1bit_image.png", img_binary, params);
imwrite("8bit_image.png", img_binary);

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



최초 작성 2019. 1. 28



반응형

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

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


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

+ Recent posts