雕刻效果的实现【OpenCV+QT】

来源:互联网 发布:java线程同步的方法 编辑:程序博客网 时间:2024/04/24 18:53

雕刻可以区分为凸雕和凹雕。

凸雕基右下角的点减去左上角的点,

凹雕是左上角的点减去右下角的点。

【效果图】

因为进行了缩放,效果看起来差一些。


具体代码如下:

【效果处理代码】

void MainWindow::on_tu1_triggered(){    //注意一点即可,雕刻中,浮雕(凸雕)是右下角的点减去左上角的点    //雕刻,凹雕,是左上角的点减去右下角的点。    //尝试使用多种方式去看雕刻的效果。    //改变的方式包括:最后加的像素值不同;右上角、左上角点选取不同    Mat dst(srcImage.size(),CV_8UC3);    for (int i=1; i<srcImage.rows-1; i++)    {        uchar *current = srcImage.ptr<uchar>(i);        uchar *currentBefore = srcImage.ptr<uchar>(i+1);        //   uchar *currentNext = srcImage.ptr<uchar>(i+1);        uchar *dstLine = dst.ptr<uchar>(i);        for (int j=1; j<srcImage.cols-1; j++)        {            for (int k=0; k<3; k++)            {                int tmp0 = current[3*j+k]-currentBefore[3*(j-1)+k]+128;//此处与其他不同,浮雕1                if (tmp0<0)                    dstLine[3*j+k]=0;                else if(tmp0>255)                    dstLine[3*j+k]=255;                else                    dstLine[3*j+k]=tmp0;            }        }    }    dst.copyTo(dstImage);    /*imshow("srcImage",srcImage);      imshow("dstImage",dstImage);      */    showLabel(dstImage,ui->label2);}

【标签显示图片代码】

void MainWindow::showLabel(Mat m, QLabel *l){    //   cv::cvtColor(m,m,CV_BGR2RGB);    img = QImage((const unsigned char*)(m.data),m.cols,m.rows,m.cols*m.channels(), QImage::Format_RGB888);    //l.clear();    l->clear();    //img=  img.scaled(l.width(),l.height());    img=img.scaled(l->width(),l->height());    //l.setPixmap(QPixmap::fromImage(img));    l->setPixmap(QPixmap::fromImage(img));}

【参考资料】

1.学习OpenCV:滤镜系列(1)—— 雕刻&浮雕

http://blog.csdn.net/yangtrees/article/details/9090607

这是一个专题系列,包含很多滤镜处理效果。

2.图像处理函数之C语言实现,有真相

http://www.douban.com/group/topic/28961821/

包含非常多的滤镜效果处理。

1 0
原创粉丝点击