5.3-基于C++的OpenCV学习

1.对于图片的简单处理
读取,显示,灰度图,降噪,边界识别等

#include
using namespace cv;
using namespace std;
void main()
{
    Mat yuantu = imread("lena.jpg");//载入原图
    imshow("原图", yuantu);//显示原图
    //Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));//返回一个指定形状尺寸的内核矩阵
    //Mat dst;//接收返回值
    //erode(yuantu, dst, element);//erode函数
    //blur(yuantu, dst, Size(7, 7));//均值滤波处理的模糊-降噪
    Mat dst, edge, gray;
    dst.create(yuantu.size(), yuantu.type());//创建一个和原图同类型和大小的矩阵
    cvtColor(yuantu, gray, COLOR_BGR2GRAY);//灰度图
    blur(gray, edge, Size(3, 3));//降噪
    Canny(edge, edge, 3, 9);//Canny边缘检测

    imshow("处理后", edge);
    waitKey(0);
}

2.视频处理
对于视频的调取

VideoCapture capture;
    capture.open("1.avi");//读取视频
    while (1) {
        Mat frame;
        capture >> frame;//读取当前帧
        imshow("dada", frame);
        waitKey(10);
        //弄一张Mat变量来储存每一帧的图像,然后控制每隔多少毫秒输出一次
    }
    waitKey(0);
}

如果需要调用自己的摄像头,改成capture.open(0);即可。
结合上面两个可以自己调用摄像头对拍摄视频进行边界处理

    VideoCapture capture;
    capture.open(0);//读取视频
    Mat edge;
    while (1) {
        Mat frame;
        capture >> frame;//读取当前帧
        cvtColor(frame, edge, COLOR_BGR2GRAY);
        blur(edge, edge, Size(7, 7));
        Canny(edge, edge, 0, 30);
        imshow("dada", edge);
        waitKey(30);
        //弄一张Mat变量来储存每一帧的图像,然后控制每隔多少毫秒输出一次
    }
    waitKey(0);
}

3.OpenCV
imread,imshow等
滑动条(Trackbar)
Mat类:Mat M(7,7,CV_32FC2,Scalar(1,3)); 表示:创建一个2通道,且每个通道的值都为(1,3),深度为32,7行7列的图像矩阵。CV_32F表示每个元素的值的类型为32位浮点数,C2表示通道数为2,Scalar(1,3)表示对矩阵每个元素都赋值为(1,3),第一个通道中的值都是1,第二个通道中的值都是3.

你可能感兴趣的:(日常学)