#include "StdAfx.h" #include "ImageBWBinaray.h" CImageBWBinaray::CImageBWBinaray(bool needtoBW):needToBW(needtoBW) { } CImageBWBinaray::~CImageBWBinaray(void) { } void CImageBWBinaray::apply(cv::Mat& dib,int side) { if (needToBW) { if (dib.channels()!=1) { return; } threshold(dib,dib,128.0,255.0,CV_THRESH_BINARY); } } void CImageBWBinaray::gray2binary(cv::Mat gray, unsigned char* binary){ if(gray.channels() != 1) return; int width = gray.cols; int height = gray.rows; int n_lineByte = (width + 7)/8; int lineByte = (n_lineByte * 8 + 31)/32*4; unsigned char * imageData = gray.data; unsigned char temp; for(int row = height -1 ; row >= 0 ; row--){ for(int col =0; col < width; col++ ){ int pos = col % 8; int pix = *(imageData+ row * width + col); temp = 1 << (7 - pos ); if( pix == 255 ){ *(binary + col /8) |= temp; }else{ *(binary + col / 8 ) &= (~temp); } } binary = binary + lineByte; } }