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