OpenCV中保存视频无法打开,编码不支持如何解决?

在网上找了好多教程还是不行,这里提示不支持这种视频编码格式,如何解决这个问题?

img

格式和后缀对不上就会这样。如果你保存的是.mp4格式的,需要换成下面的cv2.VideoWriter_fourcc('mp4v')
如果是cv2.VideoWriter_fourcc(
'MJPG'),应该是.avi的格式

cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))

https://stackoverflow.com/questions/57792837/opencv-ffmpeg-tag-is-not-supported-with-codec-id-12-and-format-mp4-mp4/66539616

换一个python-opencv的版本试试,或者对你的视频文件转码一下

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7789219
  • 你也可以参考下这篇文章:opencv的图片处理:缩小尺寸为原图的一半【自己练习存档,没有参考价值,多看其他大神代码,谢谢】
  • 除此之外, 这篇博客: OpenCV学习心得中的 3、利用电脑摄像头从外界拍摄一幅自己的图像,添加圆(或其他图形)给自己打码,同时可以通过按键来更改分辨率,并图片右下角添加时间 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <string>
    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;
    }
    

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

  • 您还可以看一下 AI100讲师老师的计算机视觉实战:如何使用OpenCV构建视觉应用课程中的 计算机视觉实战:如何使用OpenCV快速构建视觉应用小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^