48 lines
985 B
C++
48 lines
985 B
C++
|
#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;
|
||
|
}
|
||
|
}
|