opencv常用api

opencv常用api

截取图像

cpp 复制代码
cv::Mat pic2;
pic(cv::Rect(50, 50, 200, 200)).copyTo(pic2);
cv::imshow("Image Display2", pic2);

将图像区域复制到图像指定的区域

cpp 复制代码
pic2.copyTo(pic(cv::Rect(200, 200, 200, 200)));
cv::imshow("Image Display3", pic);

通过迭代器获取图像像素

cpp 复制代码
void ModifyColorData(cv::Mat& img , cv::Mat& out , int pixel) {
    // 通过迭代器获取图像的像素
    out = img.clone();
    cv::Mat_<cv::Vec3b>::iterator itstart = out.begin<cv::Vec3b>();
    cv::Mat_<cv::Vec3b>::iterator itend = out.end<cv::Vec3b>();
    for (; itstart != itend; itstart++) {
        (*itstart)[0] = (*itstart)[0] / pixel * pixel + pixel / 3;
        (*itstart)[1] = (*itstart)[1] / pixel * pixel + pixel / 3;
        (*itstart)[2] = (*itstart)[2] / pixel * pixel + pixel / 3;
    }
    cv::imshow("目标图像", out);
    /*
    vec3b
    * 全部类型为 cv::Vec{2,3,4,6,8}{b,d,f,i,s,w}
    * 其中数字2,3,4,6,8表示列向量的长度
    * 字母 b ,d , f, i ,s ,w表示类型
    * b-->uchar , d-_>double , f-->float , i-->int , s-->showt , w-->ushort
    * 数字和类型之间的组合,构成不同的Vec向量
    */
}

绘制直线

cpp 复制代码
void drawLine(cv::Mat& img) {
    // 定义点  ,第一种方式
    cv::Point p1 = cv::Point(20, 30);
    // 定义点  ,第二种方式
    cv::Point p2;
    p2.x = 250;
    p2.y = 30;
    // 定义线的颜色
    cv::Scalar myColor = cv::Scalar(0,0,255); // bgr
    // 在背景绘制线条
    cv::line(img, p1, p2, myColor , 5 , cv::LINE_8);  // cv::LINE_8
}

绘制矩形

cpp 复制代码
void drawrectangle(cv::Mat& img) {
    cv::Rect rect = cv::Rect(50, 50, 250, 300);
    // 设置颜色
    cv::Scalar color = cv::Scalar(255, 0, 0);
    cv::rectangle(img, rect, color, 3, cv::LINE_8);
}

绘制圆

cpp 复制代码
void drawcircle(cv::Mat& img) {
    // 确定圆心
    cv::Point point = cv::Point(img.cols / 2, img.rows / 2);
    // 设置颜色
    cv::Scalar color = cv::Scalar(0, 255, 0);
    // 绘制园
    cv::circle(img, point, 100, color, 2 , cv::LINE_8);
}

绘制椭圆

cpp 复制代码
void drawellipse(cv::Mat& img) {
    // 确定圆心
    cv::Point point = cv::Point(img.cols / 2, img.rows / 2);
    // 设置颜色
    cv::Scalar color = cv::Scalar(0, 255, 255);
    cv::ellipse(img , point , cv::Size(20, 50) , 0 , 0 , 360 , color);
}

绘制多边形

cpp 复制代码
void drawpolyline(cv::Mat& img) {
    // 定义多边形的顶点坐标
    std::vector<cv::Point> pts;
    pts.push_back(cv::Point(50, 50));
    pts.push_back(cv::Point(200, 50));
    pts.push_back(cv::Point(200, 200));
    pts.push_back(cv::Point(50, 200));
    cv::polylines(img , pts , true , cv::Scalar(0, 255, 0) , 3 , cv::LINE_8);
}
相关推荐
北京耐用通信6 分钟前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
火山引擎开发者社区9 分钟前
TRAE × 火山引擎 Supabase:为你的 AI 应用装上“数据引擎”
人工智能
小a彤36 分钟前
GE 在 CANN 五层架构中的位置
人工智能·深度学习·transformer
前端若水1 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Upsy-Daisy1 小时前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
企学宝1 小时前
企学宝5月专题课程丨《OpenClaw AI 智能体实战营:从零基础部署到全场景自动化落地》
人工智能·ai·企业培训
冬奇Lab2 小时前
让 AI Agent 更可靠:Harness Engineering 与多 Agent 系统工程实践
人工智能·llm·agent
放下华子我只抽RuiKe52 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
想你依然心痛2 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“文思智脑“——PC端AI智能体沉浸式智能写作工作台
人工智能·ar·harmonyos·ai写作
冬奇Lab2 小时前
一天一个开源项目(第108篇):Andrej Karpathy Skills - 用一个 CLAUDE.md 文件修复 LLM 编码的四个顽疾
人工智能·开源·资讯