www.pudn.com > snake_vc++.rar > QtCvWrapper.cpp


// Qt includes 
#include  
#include  
 
 
// local includes 
#include "qtcvwrapper.h" 
#include "MainProgram.h" 
#include "snake.h" 
 
//////////////////////////////////////////////////////////////////////////// 
QtCvWrapper::QtCvWrapper(MainProgram* parent, MainWindow* gui) : 
m_parent(parent), 
m_gui(gui), 
m_snake(0), 
m_iplImg(0), 
m_iterate(true), 
m_step(false) 
{ 
 
} 
 
//////////////////////////////////////////////////////////////////////////// 
QtCvWrapper::~QtCvWrapper(void) 
{ 
	if(m_snake) 
		delete m_snake; 
} 
 
//////////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotSnakeButtonPressed() 
{ 
	if(!m_snake) 
		return; 
 
	IplImage* resultImg = m_snake->iterateSnakeCurve(20, true); 
 
	QImage* convertedImg = new QImage(); 
	convertImage(resultImg, convertedImg); 
	m_gui->showImage(convertedImg);} 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::createTestImage(CvPoint center, CvSize axes, CvScalar color, CvScalar background) 
{ 
	m_iplImg = cvCreateImage( cvSize(512,512), IPL_DEPTH_8U, 1); 
	cvSet(m_iplImg, background); 
	cvEllipse( m_iplImg, center, axes, 0, 0, 360, color, -1, 8, 0 ); 
} 
 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::convertImage(IplImage* src, QImage* dest) 
{ 
	QString tmpFile = "tmpImg.bmp"; 
	int status = cvSaveImage(tmpFile.toLatin1(), src); 
	dest->load(tmpFile);	 
} 
 
//////////////////////////////////////////////////////////////////////////// 
CvPoint* QtCvWrapper::createEllipse(QPoint ulPt, QPoint lrPt, int numSegments) 
{ 
	int width   = lrPt.x() - ulPt.x(); 
	int height  = lrPt.y() - ulPt.y(); 
	CvPoint* pt = new CvPoint[numSegments]; 
	for(int i = 0; i < numSegments; i++) 
	{ 
		pt[i].x = cvRound( width * cos(i * 6.28 / numSegments) / 2.0 
			+ ulPt.x() + (width / 2) ); 
 
		pt[i].y = cvRound( height * sin(i * 6.28 / numSegments) / 2.0 
			+ ulPt.y() + (height / 2) ); 
	} 
	return pt; 
} 
 
//////////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotImageOpened() 
{ 
	qDebug(m_gui->getFileName()->toLatin1()); 
	// load image as a grayscale image 
	m_iplImg = cvLoadImage(m_gui->getFileName()->toLatin1(), 0); 
} 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotTest() 
{ 
	this->createTestImage(cvPoint(256,256), cvSize(100,70), cvRealScalar(126), cvRealScalar(125)); 
	m_snake = new Snake(this, m_iplImg); 
	m_snake->initSnakeCurve(); 
	IplImage* resultImg = m_snake->iterateSnakeCurve(20, true); 
 
	QImage* convertedImg = new QImage(); 
	convertImage(resultImg, convertedImg); 
	m_gui->showImage(convertedImg); 
	delete convertedImg; 
} 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotInitCurve() 
{ 
	if(!m_iplImg) 
		return; 
	qDebug("initSnakeCurve: %d/%d -- %d/%d", m_gui->getULPt().x(),  
		m_gui->getULPt().y(), m_gui->getLRPt().x(), m_gui->getLRPt().y()); 
	CvPoint* ellipse = createEllipse(m_gui->getULPt(), m_gui->getLRPt(), 200); 
	m_snake = new Snake(this, m_iplImg); 
	m_snake->initSnakeCurve(ellipse); 
 
	IplImage* snakeImg = m_snake->getSnakeImage(); 
	QImage* convertedImg = new QImage(); 
	convertImage(snakeImg, convertedImg); 
	m_gui->showImage(convertedImg); 
	delete convertedImg; 
} 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotIterationOn() 
{ 
	qDebug("iteration on"); 
	m_iterate = true; 
	m_step    = false; 
} 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotIterationOff() 
{ 
	qDebug("iteration off"); 
	m_iterate = false; 
	m_step    = false; 
 
} 
 
//////////////////////////////////////////////////////////////////////////// 
void QtCvWrapper::slotIterationStep() 
{ 
	qDebug("iteration step"); 
	m_iterate = true; 
	m_step    = true; 
}