76 lines
1.4 KiB
C++
76 lines
1.4 KiB
C++
#include "stdafx.h"
|
|
#include "ImageTranferBW.h"
|
|
|
|
using namespace cv;
|
|
ImageTranferBW::ImageTranferBW(cv::Mat & mat)
|
|
{
|
|
threshold(mat, mat, 200, 255, CV_THRESH_BINARY);
|
|
|
|
float kernel_data[] = { -0.1f, 0, 0, 0, -0.1f, 0, 0, 0, 0, 0, 0, 0, 1.5f, 0, 0, 0, 0, 0, 0, 0, -0.1f, 0, 0, 0, -0.1f };
|
|
Mat kernel(5, 5, CV_32FC1, kernel_data);
|
|
filter2D(mat, mat, mat.depth(), kernel);
|
|
|
|
m_width = mat.cols;
|
|
m_height = mat.rows;
|
|
|
|
//!< Éú³ÉͼÏñ
|
|
m_buffer = new unsigned char[height()*step()];
|
|
memset(m_buffer, 0, height()*step());
|
|
unsigned char* binary = m_buffer;
|
|
int n_lineByte = (m_width + 7) >> 3;
|
|
unsigned char * imageData = mat.data;
|
|
unsigned char temp;
|
|
for (int row = 0; row < m_height; row++)
|
|
{
|
|
for (int col = 0; col < m_width; col++)
|
|
{
|
|
int pos = col % 8;
|
|
int pix = *(imageData + row * mat.step1() + col);
|
|
temp = 1 << (7 - pos);
|
|
if (pix == 255)
|
|
{
|
|
*(binary + row * m_lineByte + col / 8) |= temp;
|
|
}
|
|
else
|
|
{
|
|
*(binary + row * m_lineByte + col / 8) &= (~temp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ImageTranferBW::~ImageTranferBW()
|
|
{
|
|
if (m_buffer != NULL)
|
|
{
|
|
delete[] m_buffer;
|
|
}
|
|
}
|
|
|
|
unsigned char * ImageTranferBW::getLineBits(int line/* = 0*/)
|
|
{
|
|
return m_buffer + step()*line;
|
|
}
|
|
|
|
int ImageTranferBW::step()
|
|
{
|
|
int n_lineByte = (m_width + 7) >> 3;
|
|
m_lineByte = ((n_lineByte * 8 + 31) >> 5) << 2;
|
|
return m_lineByte;
|
|
}
|
|
|
|
int ImageTranferBW::bpp()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
int ImageTranferBW::width()
|
|
{
|
|
return m_width;
|
|
}
|
|
|
|
int ImageTranferBW::height()
|
|
{
|
|
return m_height;
|
|
}
|