mfc-imageProcessing 바이너리 이미지를 만들어보자
2018, May 29
이전까지 밝기와 contrast 를 조절하는 작업을 했다.
픽셀 단위 작업
- 밝기 조절
- 콘트라스트 조절
- 흑백이미지를 바이너리화
영역 단위 작업
- 이진 이미지 침식
- 이진 이미지 팽창
이제 흑백이미지를 바이너리화 하는 작업을 해보자.
흑백이미지 바이너리화
ImageProc.h
class ImageProc
{
...
public:
static void Binarization(unsigned char* image_gray,
const int width, const int height, const unsigned char threshold);
}
ImageProc.cpp
// threshold 값보다 작으면 0 크면 255를 만드는 함수이다.
void ImageProc::Binarization(unsigned char* image_gray,
const int width, const int height, const unsigned char threshold)
{
for(int i=0; i<width*height; i++)
{
if(image_gray[i] < threshold)
image_gray[i] = 0;
else
image_gray[i] = 255;
}
}
ImageProcessingDoc.h
class CImageProcessingDoc : public CDocument
{
...
public:
afx_msg void OnPixelprocessingBinarization();
}
ImageProcessingDoc.cpp
void CImageProcessingDoc::OnPixelprocessingBinarization()
{
ImageProc::Binarization(m_Images[cur_index].image_gray,
m_Images[cur_index].width, m_Images[cur_index].height, 127);
CImageProcessingView* pView = (CImageProcessingView*)((CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
pView->SetDrawImage(m_Images[cur_index].image_color, m_Images[cur_index].image_gray,
m_Images[cur_index].width, m_Images[cur_index].height);
pView->OnInitialUpdate();
}
실행하면 다음과 같은 화면이 나온다.