Qt&OpenCV练习(三)

使用配置在Qt5环境下的OpenCV4实现图片的读取、区域截图与线性叠加

本文所涉程序为毛星云/冷雪飞等编著的《OpenCV3编程入门》中所写例程,仅为记录本人学习中所碰到的问题与对程序的理解。
先在.pro文件中声明如下变量

INCLUDEPATH +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\include

LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingCVw\bin\libopencv_core411.dll
LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingw\bin\libopencv_highgui411.dll
LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingw\bin\libopencv_imgproc411.dll
LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingw\bin\libopencv_calib3d411.dll
LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingw\bin\libopencv_imgcodecs411.dll
LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingw\bin\libopencv_videoio411.dll
LIBS +=D:\Opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\x64\mingw\bin\libopencv_video411.dll
//以上放在.pro文件原有代码的最后就好,前面的路径根据自己安装位置不同而改变

所涉及程序如下

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;


int main()
{
    Mat girl=imread("D:/qt's practice/build-2-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug/girl.jpg");
    //似乎Qt不支持使用相对路径进行读文件操作,但如果构建后将图片放入构建文件目录下的话相对路径又可以使用了,这个问题一直没有解决,为调试方便这里暂且使用绝对路径的形式
    namedWindow("[1]动漫图");
            imshow("[1]动漫图",girl);
    Mat image= imread("D:/qt's practice/build-2-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug/dota.jpg",1);
    Mat logo= imread("D:/qt's practice/build-2-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug/logo.jpg");
    namedWindow("[2]原画图");
    imshow("[2]原画图",image);

    namedWindow("[3]logo图");
    imshow("[3]logo图",logo);

    Mat imageROI;
    imageROI= image(Rect(360,150,logo.cols,logo.rows));
    //这里注意image(Rect(*,*,*,*))函数后四个参数的含义,前两个函数指向image——即前面定义的一张图片——的像素坐标位置,
    //后两个参数分别为从该点向右*列,向下*行,以此画出一个矩形区域截取image中的图像,只不过这里为了后续的线性叠加操作,后两个参数选择了logo图的列数与行数来保证截取的图像与logo图像素大小一样。
addWeighted(imageROI,0.5,logo,0.3,0.,imageROI);//线性叠加操作,以imageROI0.5透明度、logo0.3透明度进行叠加。最后是γ值,图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了
    namedWindow("[4]原画+logo图");
    imshow("[4]原画+logo图",imageROI);
    imwrite("由imwrite生成的图片.jpg",image);
    waitKey(0);
    return 0;

}

你可能感兴趣的:(opencv)