转换为QImage到Mat Image给了我一个奇怪的图像

时间:2015-12-04 14:13:19

标签: c++ qt opencv qimage

我正在使用QtCreator开发OpenCV3.0中的Surf检测算法。

我正在使用鼠标事件裁剪QLabel上显示的QImage。所以我可以将裁剪后的图像与实时网络摄像头进行比较

我的问题是,当我将QImage转换为Mat Image时,它的效果非常好。

但是当我尝试将裁剪的QImage转换为Mat Image时,我的输出图像完全奇怪。

这是我的Mouseevent代码:

void surf_detection::mousePressEvent(QMouseEvent *ev)
{
if(ui->label_2->underMouse()){
   // cout <<"Entered Press"<<endl;
    origin = ev->pos();
    //if (!rubberBand)
        rubberBand = new QRubberBand(QRubberBand::Rectangle, this);

        rubberBand->show();
}
}

void surf_detection::mouseMoveEvent(QMouseEvent *ev)
{
if(ui->label_2->underMouse()){
rubberBand->setGeometry(QRect(origin, ev->pos()).normalized());
// cout <<"Entered Move"<<endl;
}
}

void surf_detection::mouseReleaseEvent(QMouseEvent *ev)
{
if(ui->label_2->underMouse()){

QPoint a = mapToGlobal(origin);
QPoint b = ev->globalPos();

a = ui->label_2->mapFromGlobal(a);
b = ui->label_2->mapFromGlobal(b);

rubberBand->hide();

QPixmap OriginalPix(*ui->label_2->pixmap());

double sx = ui->label_2->rect().width();
double sy = ui->label_2->rect().height();
sx = OriginalPix.width() / sx;
sy = OriginalPix.height() / sy;

a.setX(int(a.x() * sx));
b.setX(int(b.x() * sx));
a.setY(int(a.y() * sy));
b.setY(int(b.y() * sy));


QRect myRect(a,b);

QImage newImage;
newImage = OriginalPix.toImage();

copyImage = newImage.copy(myRect);

ui->label_2->setScaledContents(true);
ui->label_2->setPixmap(QPixmap::fromImage(copyImage));
ui->label_2->repaint();

}

这里copyImage是一个成员变量,我打算用它来进行SURF检测。

My QImage to Mat图片代码:

UMat surf_detection::QImagetocv(QImage img){

Mat tmp(img.height(),img.width(),CV_8UC3,
        (uchar*)img.bits(),img.bytesPerLine());
UMat con;
tmp.copyTo(con);
UMat result;
cvtColor(con,result,CV_BGR2RGB);
return result;

}

我不明白转换在哪里出错了。 评论赞赏!

我在这附上了一张奇怪输出的照片 Output image.

0 个答案:

没有答案