⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtcvwrapper.cpp

📁 一个关于snake算法的VISUAL C++的实现
💻 CPP
字号:
// Qt includes
#include <QtGui/QMessageBox>
#include <QtCore/QPoint>


// 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;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -