📄 qtcvwrapper.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 + -