• opencv创建图片,绘制图片,画框,划线,改变像素点颜色


    创建空白图片

    bool tool_class::creatEmpty(int width, int height, std::string image_p)
    {
    
        // 创建一个空白图像
        cv::Mat blankImage(height, width, CV_8UC3, cv::Scalar(255, 255, 255));
    
        // 保存图像为文件(可选)
        cv::imwrite(image_p.c_str(), blankImage);
    
        // 显示空白图像
        cv::imshow("Blank Image", blankImage);
    
        // 等待用户按下任意键后关闭窗口
        cv::waitKey(0);
    
        // 关闭窗口
        cv::destroyAllWindows();
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    创建一张渐变色彩色

    bool tool_class::creatColor(std::string image_p)
    {
        // 指定图像的宽度和高度
        int width = 640;
        int height = 480;
    
        // 创建一个空白图像
        cv::Mat gradientImage(height, width, CV_8UC3);
    
        // 生成渐变色
        for (int y = 0; y < height; y++) 
        {
            for (int x = 0; x < width; x++) 
            {
                // 计算RGB颜色值,根据x和y的位置生成渐变色
                uchar blue = static_cast<uchar>(x * 255 / width);
                uchar green = static_cast<uchar>((x + y) * 255 / (width + height));
                uchar red = static_cast<uchar>(y * 255 / height);
                // 设置像素颜色
                // 三通道:at(row, col)
                // 单通道:at(row, col)
                gradientImage.at<cv::Vec3b>(y, x) = cv::Vec3b(blue, green, red);
            }
        }
    
        // 保存图像为文件(可选)
        cv::imwrite(image_p.c_str(), gradientImage);
    
        // 显示渐变色图像
        cv::imshow("Gradient Image", gradientImage);
    
        // 等待用户按下任意键后关闭窗口
        cv::waitKey(0);
    
        // 关闭窗口
        cv::destroyAllWindows();
    
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述

    绘制多边形

    bool tool_class::drawPolygon(std::string image_p, std::vector<cv::Point> points)
    {
        cv::Mat ima = cv::imread(image_p.c_str()); // 读取图像,替换为你的图片路径  
    
        cv::Scalar red = cv::Scalar(0, 0, 255);  // Red color  
        cv::Scalar blue = cv::Scalar(255, 0, 0);  // Red color  
        int thickness = 2;
    
        // 使用polylines函数给图片绘制多边形
        cv::polylines(ima, points, true, red, thickness, 8, 0);
        // 填充颜色
        cv::fillPoly(ima, std::vector<std::vector<cv::Point>>{points}, blue, 8, 0);
        // 显示图像  
        cv::imshow("Image with line", ima);
        // 绘制
        cv::imwrite(image_p.c_str(), ima);
    
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    绘制多线

    bool tool_class::drawLines(std::string image_p, std::vector<cv::Point> points)
    {
        cv::Mat ima = cv::imread(image_p.c_str()); // 读取图像,替换为你的图片路径  
        cv::Scalar red = cv::Scalar(0, 0, 255);  // Red color  
        int thickness = 2;
    
        // 遍历点列表,绘制线段
        for (size_t i = 0; i < points.size() - 1; i++)
        {
            cv::Point2f start = points[i];
            cv::Point2f end = points[i + 1];
    
            cv::line(ima, start, end, red, thickness);
        }
    
        cv::imwrite(image_p.c_str(), ima);
    
        return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    改变像素点颜色

    bool tool_class::changeColor(std::string image_p, int width, int height)
    {
        cv::Mat ima = cv::imread(image_p.c_str()); // 读取图像,替换为你的图片路径  
        cv::Scalar Red = cv::Scalar(0, 0, 255);  // Red color  
    
        // 改变像素点的颜色
        ima.at<cv::Vec3b>(height, width)[0] = 0;
        ima.at<cv::Vec3b>(height, width)[1] = 0;
        ima.at<cv::Vec3b>(height, width)[2] = 255;
    
        // 或者
        //uchar blue = 0;
        //uchar green = 0;
        //uchar red = 255;
        //ima.at(height, width) = cv::Vec3b(blue, green, red);
    
        cv::imwrite(image_p.c_str(), ima);
        return true;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    阿里400+天,我为什么离开阿里
    Vue Patch,忙啥呢?
    小程序优点
    数据结构——顺序表和链表
    Windows版MySql8.0安装(亲测成功!)
    选择正确的 React 状态管理解决方案的指南
    01-linux基础-操作系统的学习
    动力节点索引优化解决方案学习笔记——性能分析
    告别脏乱差,多应用,快交付的智能公寓管理平台来啦
    技术基建如何降本增效——云迁移
  • 原文地址:https://blog.csdn.net/mankeywang/article/details/134204336