我希望把这篇文章中的效果实现。
【Qt学习】 OpenCV美图特效_qt图像处理_顾城沐心的博客-CSDN博客
问题1:
我发现是因为我使用的是MSVC2017 32位套件,改为MSVC2017 64位套件debug就好了。
感觉这是因为我选用的lib库也是64位的。
E:\opencv454\opencv\build\x64\vc15\lib
2.“CV_RGB2BGR”: 未声明的标识符_cv_bgr2rgb_8BitCat的博客-CSDN博客
3.
雪花屏效果的实现。
代码:
Mat srcimage= imread(path.toStdString());
cvtColor(srcimage,srcimage,CV_BGR2RGB);
QImage disimage=QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
//像素二维矩阵函数
int rows = srcimage.rows;
//像素二维矩阵列数
int cols = srcimage.cols * srcimage.channels();
for(int i=0;i<rows;i++)
{
uchar * data = srcimage.ptr<uchar>(i);
for(int j=0;j<cols;j++)
{
//雪花屏特效
int q = rand()%cols;
data[q]=155;//某些通道随机改成155
}
}
//Mat转QImage 像素 newlabel放置图像处理后图片
QImage disimage2 = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
分析:
(因为我没有opencv的基础,所以cv空间很多函数的含义都不了解,需要学习)
1.
cvtColor(srcimage,srcimage,CV_BGR2RGB);进行颜色空间的转换。
opencv默认的彩色图像的颜色空间是BGR。
CV_BGR2RGB:BGR与RGB之间颜色空间的转换。
学习opencv之cvtColor_Huo的藏经阁的博客-CSDN博客
2.
QImage disimage=QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
函数原型:
QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR)
参数1:
bytesPerLine:图像每行字节数srcimage.cols*srcimage.channels()
opencv MAT中维度(dims)和通道(channels)的理解和区别_矩阵中channel是什么意思_AndyCheng_hgcc的博客-CSDN博客
参数2:
format:
QImage::Format_RGB888
value:13
注释:The image is stored using a 24-bit RGB format (8-8-8).
感想:根据大佬的教程,程序可以跑起来了,但是很多函数还不理解。
本地源码地址:D:\Qt\Qt5Book\Qt5.9Samp\opencv\widget(给自己留个门)。