博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv test code-1
阅读量:4058 次
发布时间:2019-05-25

本文共 4632 字,大约阅读时间需要 15 分钟。

#include "mainwidget.h"
#include <QDebug>
MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    this->m_vLayout=new QVBoxLayout;
    this->m_hLayout=new QHBoxLayout;
    this->m_btnRGB=new QToolButton;
    this->m_btnRGB->setText(tr("RGB"));
    connect(this->m_btnRGB,SIGNAL(clicked()),this,SLOT(ZSlot2RGB()));
    this->m_btnGray=new QToolButton;
    this->m_btnGray->setText(tr("Gray"));
    connect(this->m_btnGray,SIGNAL(clicked()),this,SLOT(ZSlot2Gray()));
    this->m_btnFindCircle=new QToolButton;
    this->m_btnFindCircle->setText(tr("Recognize"));
    connect(this->m_btnFindCircle,SIGNAL(clicked()),this,SLOT(ZSlotFindCircle()));
    this->m_hLayout->addWidget(this->m_btnRGB);
    this->m_hLayout->addWidget(this->m_btnGray);
    this->m_hLayout->addWidget(this->m_btnFindCircle);
    this->m_vLayout->addStretch(1);
    this->m_vLayout->addLayout(this->m_hLayout);
    this->setLayout(this->m_vLayout);
    this->m_srcImg=cvLoadImage("/home/shell.albert/opencvtest/2.png");
    if(this->m_srcImg)
    {
        //cvCvtColor(this->m_srcImg,this->m_srcImg,CV_BGR2RGB);
        this->resize(this->m_srcImg->width+20,this->m_srcImg->height+20);
        this->m_dstImg=cvCreateImage(cvGetSize(this->m_srcImg),IPL_DEPTH_8U,1);
    }
    this->m_imgAction=IMG_SHOW_RGB;
}
MainWidget::~MainWidget()
{
    delete this->m_btnGray;
    delete this->m_btnRGB;
    delete this->m_btnFindCircle;
    delete this->m_hLayout;
    delete this->m_vLayout;
    if(this->m_srcImg)
    {
        cvReleaseImage(&this->m_srcImg);
    }
    if(this->m_dstImg)
    {
        cvReleaseImage(&this->m_dstImg);
    }
}
void MainWidget::paintEvent(QPaintEvent *event)
{
    QPainter tPainter(this);
    switch(this->m_imgAction)
    {
    case IMG_SHOW_RGB:
    {
        cvCvtColor(this->m_srcImg,this->m_srcImg,CV_BGR2RGB);
        uchar *imgData=(uchar*)this->m_srcImg->imageData;
        QImage tImage(imgData,this->m_srcImg->width,this->m_srcImg->height,this->m_srcImg->widthStep,QImage::Format_RGB888);
        tPainter.drawImage(10,10,tImage);
        cvCvtColor(this->m_srcImg,this->m_srcImg,CV_RGB2BGR);
    }
        break;
    case IMG_SHOW_GRAY:
    {
#if 0
        cvCvtColor(this->m_srcImg,this->m_dstImg,CV_BGR2GRAY);
        uchar *imgData=(uchar*)this->m_dstImg->imageData;
        QImage tImage(imgData,this->m_dstImg->width,this->m_dstImg->height,this->m_dstImg->widthStep,QImage::Format_Indexed8);
        QVector<QRgb> colorTable;
        for(qint32 i=0;i<256;i++)
        {
            colorTable.append(qRgb(i,i,i));
        }
        tImage.setColorTable(colorTable);
        tImage.setColorCount(255);
        tPainter.drawImage(10,10,tImage);
#endif
        IplImage *tDstImg=cvCreateImage(cvGetSize(this->m_srcImg),IPL_DEPTH_8U,1);
        IplImage *tImg=cvCreateImage(cvGetSize(this->m_srcImg),IPL_DEPTH_8U,1);
        cvCvtColor(this->m_srcImg,tDstImg,CV_BGR2GRAY);
        cvCanny(tDstImg,tImg,50,150,3);
        uchar *imgData=(uchar*)tImg->imageData;
        QImage tImage(imgData,tImg->width,tImg->height,tImg->widthStep,QImage::Format_Indexed8);
        QVector<QRgb> colorTable;
        for(qint32 i=0;i<256;i++)
        {
            colorTable.append(qRgb(i,i,i));
        }
        tImage.setColorTable(colorTable);
        tImage.setColorCount(255);
        tPainter.drawImage(10,10,tImage);
        cvReleaseImage(&tDstImg);
        cvReleaseImage(&tImg);
    }
        break;
    case IMG_FIND_CIRCLE:
    {
        //step 1:BGR to Gray.
        cvCvtColor(this->m_srcImg,this->m_dstImg,CV_BGR2GRAY);
        CvMemStorage *storage=cvCreateMemStorage(0);
        //cvSmooth(dstImg,dstImg,CV_GAUSSIAN,5,5);
        CvSeq *circles=cvHoughCircles(this->m_dstImg,storage,CV_HOUGH_GRADIENT,2,this->m_dstImg->width/3,300,100,0,200);
        IplImage *color=cvCreateImage(cvGetSize(this->m_dstImg),IPL_DEPTH_8U,3);
        cvCvtColor(this->m_dstImg,color,CV_GRAY2RGB);
        printf("circle total=%d\n",circles->total);
        for(int i=0;i<circles->total;i++)
        {
            float *p=(float*)cvGetSeqElem(circles,i);
            float tX=p[0];
            float tY=p[1];
            float tRadius=p[2];
            //the destination is on the right side
            //so here we ignore the left.
            if(tX<this->m_srcImg->width/2)
            {
                qDebug()<<"bypass left side";
                continue;
            }
            //draw a circle to wrap it.
            CvPoint pt=cvPoint(cvRound(p[0]),cvRound(p[1]));
            cvCircle(color,pt,cvRound(p[2]),CV_RGB(255,0,0),3,8,0);
            //draw a 10x10 rectangle aroud circle center.
            CvPoint pt1=pt;
            CvPoint pt2=pt;
            pt1.x-=5;
            pt1.y-=5;
            pt2.x+=5;
            pt2.y+=5;
            cvRectangle(color,pt1,pt2,cvScalar(255,0,0,0),3);
            //draw text.
            CvPoint txtPt=pt;
            txtPt.y-=40;
            txtPt.x-=60;
            const char *txtInfo="fint it!";
            CvFont tFont=cvFont(3.0,3);
            cvPutText(color,txtInfo,txtPt,&tFont,cvScalar(255,255,0));
        }
        //step3.display it.
        uchar *imgData=(uchar*)color->imageData;
        QImage tImage(imgData,color->width,color->height,color->widthStep,QImage::Format_RGB888);
        tPainter.drawImage(10,10,tImage);
        cvReleaseImage(&color);
    }
        break;
    default:
        break;
    }
}
void MainWidget::ZSlot2RGB()
{
    this->m_imgAction=IMG_SHOW_RGB;
    this->update();
}
void MainWidget::ZSlot2Gray()
{
    this->m_imgAction=IMG_SHOW_GRAY;
    this->update();
}
void MainWidget::ZSlotFindCircle()
{
    this->m_imgAction=IMG_FIND_CIRCLE;
    this->update();
}

转载地址:http://bczji.baihongyu.com/

你可能感兴趣的文章
java学习(9)类的四大特性2之继承(final)
查看>>
java学习(10)数组
查看>>
java学习(11)位与进制
查看>>
java学习(12)集合(1)
查看>>
java学习(13)集合(2)
查看>>
java学习(14)集合(3)
查看>>
java学习(15)泛型
查看>>
java学习(16)异常处理
查看>>
java学习(17)图形用户界面(1)
查看>>
java学习(18)图形用户界面(2)
查看>>
java学习(19)图形用户界面(3)
查看>>
java学习(20)图形用户界面(4)
查看>>
java学习(21)事件处理机制(1)
查看>>
java学习(22)线程(1)
查看>>
Python学习一之环境配置
查看>>
Python学习二之PyCharm编程软件配置
查看>>
Python学习三之基础语法
查看>>
【opencv学习笔记】022之霍夫圆变换
查看>>
【积跬步以至千里】合并优盘分区
查看>>
【opencv学习笔记】023之像素重映射
查看>>