OpenCV学习心得

目录

​​​​​​​7月19日

思考题

1、OpenCV库与Matlab、halcon的区别?

2、在显示完之后,用不用destroyWindow()有什么区别?

3、png图片格式和jpg图片格式有什么区别?

练习题

1、同时显示两张不同分辨率的图片,对比他们的大小

 2、使用Opencv,测试一下你电脑摄像头的分辦率和帧率是多少

3、利用电脑摄像头从外界拍摄一幅自己的图像,添加圆(或其他图形)给自己打码,同时可以通过按键来更改分辨率,并图片右下角添加时间


​​​​​​​7月19日

思考题

1、OpenCV库与Matlab、halcon的区别?

Halcon与OpenCV都是属于函数库,都提供了多种编程语言访问的接口,而Matlab是个完整的集成开发环境,包括了编辑器、函数库、还有Matlab语言。例如,用MATLAB你可以直接Debug,但是用Halcon和OpenCV相关的代码调试就需要配合IDE才行。
 

2、在显示完之后,用不用destroyWindow()有什么区别?

destroyWindow()用于关闭特定的窗口,括号内填写窗口的名字,类型为string

3、png图片格式和jpg图片格式有什么区别?

png是无损压缩,可以在PS中重新编辑。jpg格式是一种压缩的图片格式,不能再次编辑,而且在解析度上也是不如png格式。png格式支持透明,而jpg不支持。

练习题

1、同时显示两张不同分辨率的图片,对比他们的大小

#include 
#include 
#include 

using namespace cv;
int main() {
    Mat img = imread("/Users/milkman/Desktop/DSC_1678.jpg" , 1);
    Mat img1 = imread("/Users/milkman/Desktop/截屏2022-07-19 09.20.00.png" , 1);
    printf("图片1的分辨率为:%dx%d\n", img.cols, img.rows);
    printf("图片2的分辨率为:%dx%d", img1.cols, img1.rows);
    return 0;
}

 2、使用Opencv,测试一下你电脑摄像头的分辦率和帧率是多少

#include 
#include 
#include 

using namespace cv;
int main() {
    VideoCapture capture;
    Mat frame;
    frame= capture.open("/Users/milkman/Desktop/01.mp4");
    int fps = capture.get(CAP_PROP_FPS);
    int width = capture.get(CAP_PROP_FRAME_WIDTH);
    int height = capture.get(CAP_PROP_FRAME_HEIGHT);
    namedWindow("output", WINDOW_AUTOSIZE);
    while (capture.read(frame))
    {
        imshow("output", frame);
        char ch = waitKey(30);
        if(ch == 27){
            break;
        }
    }
    printf("FPS:%d\n", fps);
    printf("分辨率为%dx%d",width ,height);
    capture.release();
    return 0;
}

3、利用电脑摄像头从外界拍摄一幅自己的图像,添加圆(或其他图形)给自己打码,同时可以通过按键来更改分辨率,并图片右下角添加时间

#include 
#include 
#include 
using namespace cv;
using namespace std;


int main() {
    double scale_up_x = 1.0;
    double scale_up_y = 1.0;
    int i = 1;
    Mat scaled_f_up, scaled_f_down;
    while(i){
        auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
        std::stringstream ss;
        ss << std::put_time(std::localtime(&t), "%Y-%m-%d-%H:%M:%S");
        std::string str_time = ss.str();

        Mat pic = imread("/Users/milkman/Desktop/pic1.jpg", 1);
        if (pic.empty())  //判断图像文件是否存在
        {
            std::cout << "读取失败" << std::endl;
            return -1;
        }
        Point p1(900, 900);
        putText(pic, "milkman", p1, FONT_HERSHEY_COMPLEX, 2, cv::Scalar(0, 0, 0), 3, 8, 0);
        char time = system("time");
        putText(pic, str_time, Point(1000, 700), FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 0, 0), 3, 8, 0);
        rectangle(pic, Point(579, 290), Point(815, 622), cv::Scalar(255, 255, 255), -1);
        imshow("test", pic);
        waitKey(0);
        char ch = waitKey(0);
        if(ch == 38){
            scale_up_x += 0.1;
            resize(pic, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);
            imshow("scaled_f_up", scaled_f_up);
            waitKey(0);
        }
        if(ch == 40){
            scale_up_y -= 0.1;
            resize(pic, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);
            imshow("scaled_f_up", scaled_f_up);
            waitKey(0);
        }
        if(ch == 27){
            break;
        }
        scanf("%d", &i);
    }
    return 0;
}

目前除了通过按键调整图像的大小以外,其他功能都已实现。按键功能可能是循环出了问题,还没找到合适的跳出循环的条件,跪求大佬传授经验

你可能感兴趣的:(opencv,matlab,人工智能)