当前位置: 首页 > news >正文

昆明建站网站资讯平台张店网站设计

昆明建站网站资讯平台,张店网站设计,广东公司网站建设,东莞排名优化怎么做返回#xff1a;OpenCV系列文章目录#xff08;持续更新中......#xff09; 上一篇:OpenCV4.9.0开源计算机视觉库使用简要说明 下一篇: OpenCV#xff08;开源计算机视觉库#xff1a;http://opencv.org#xff09;是一个开源库#xff0c;包含数百种计算机视觉算法。… 返回OpenCV系列文章目录持续更新中...... 上一篇:OpenCV4.9.0开源计算机视觉库使用简要说明 下一篇: OpenCV开源计算机视觉库http://opencv.org是一个开源库包含数百种计算机视觉算法。该文档描述了所谓的OpenCV 2.x API它本质上是一个C API而不是基于C的OpenCV 1.x API自OpenCV 2.4发布以来C API已被弃用并且没有使用“C”编译器进行测试 OpenCV 具有模块化结构这意味着该包包含多个共享或静态库。提供以下模块 核心功能core - 定义基本数据结构的紧凑模块包括密集的多维数组 Mat 和所有其他模块使用的基本功能。图像处理 imgproc - 一个图像处理模块包括线性和非线性图像过滤、几何图像变换调整大小、仿射和透视变形、基于表格的通用重映射、色彩空间转换、直方图等。视频分析视频 - 一个视频分析模块包括运动估计、背景减法和对象跟踪算法。相机校准和 3D 重建 calib3d - 基本的多视图几何算法、单视图和立体相机校准、物体姿态估计、立体对应算法和 3D 重建元素。2D 特征框架 features2d - 显著特征检测器、描述符和描述符匹配器。对象检测 objdetect - 检测对象和预定义类的实例例如人脸、眼睛、杯子、人、汽车等。高级 GUI highgui - 简单 UI 功能的易于使用的界面。视频 I/O videoio - 一个易于使用的视频捕获和视频编解码器界面。...其他一些帮助程序模块例如 FLANN 和 Google 测试包装器、Python 绑定等。 本文档的后续章节描述了每个模块的功能。但首先请确保熟悉库中彻底使用的常见 API 概念。 API 概念 cv 命名空间 有 OpenCV 类和函数都放在命名空间中。因此若要从代码访问此功能请使用说明符cvcv::或指令using namespace cv #include opencv2/core.hpp... cv::Mat H cv::findHomography(points1, points2, cv::RANSAC, 5); ... 或 #include opencv2/core.hpp using namespace cv;... Mat H findHomography(points1, points2, RANSAC, 5 ); ... 自动内存管理 OpenCV 会自动处理所有内存。 首先stdvector、cvMat 以及函数和方法使用的其他数据结构具有在需要时释放底层内存缓冲区的析构函数。这意味着析构函数并不总是像 Mat 那样取消分配缓冲区。它们考虑了可能的数据共享。析构函数递减与矩阵数据缓冲区关联的引用计数器。当且仅当引用计数器达到零时即当没有其他结构引用同一缓冲区时缓冲区才会被释放。同样当复制 Mat 实例时不会真正复制任何实际数据。相反引用计数器是递增的以记住同一数据的另一个所有者。还有 cvMatclone 方法用于创建矩阵数据的完整副本。请参阅以下示例 ​// 创建一个8Mb大图片矩阵 Mat A(1000, 1000, CV_64F); // 为同一矩阵创建另一个句柄; // 无论矩阵大小如何这都是即时操作 Mat B A; //为A的第3行创建另一个句柄;也不会复制任何数据 Mat C B.row(3); //现在创建一个独立的矩阵副本 Mat D B.clone(); // 将B的第5行复制到C即复制A的第5行 // 到 A 的第 3 行。 B.row(5).copyTo(C); // 现在让 A 和 D 共享数据;之后是修改后的版本 //尽管C只是原始A的一行 A D; //现在使B成为一个空矩阵它不引用内存缓冲区 // 但A的修改版本仍将被C引用 // 最后制作C的完整副本。结果大修改了 B.release(); //最后制作C的完整副本。结果大修改了 //矩阵将被解除分配因为它不会被任何人引用 C C.clone(); 你可以看到垫子和其他基本结构的使用很简单。但是在不考虑自动内存管理的情况下创建的高级类甚至用户数据类型呢对于他们来说OpenCV 提供了类似于 C11 中的 stdshared_ptr 的 cv:P tr 模板类。因此不要使用普通指针 T* ptr new T(...); 您可以使用 PtrT ptr(new T(...)); 或: PtrT ptr makePtrT(...); PtrT封装指向 T 实例的指针和与指针关联的引用计数器。有关详细信息请参阅 cv:P tr 描述。 自动分配输出数据 OpenCV 会自动释放内存并且大多数时候会自动为输出函数参数分配内存。因此如果函数有一个或多个输入数组cvMat 实例和一些输出数组则输出数组将自动分配或重新分配。输出数组的大小和类型由输入数组的大小和类型决定。如果需要这些函数会采用额外的参数来帮助确定输出数组属性。 如下列 ​#include opencv2/imgproc.hpp #include opencv2/highgui.hpp using namespace cv; int main(int, char**) { VideoCapture cap(0); if(!cap.isOpened()) return -1; Mat frame, edges; namedWindow(edges, WINDOW_AUTOSIZE); for(;;) { cap frame; cvtColor(frame, edges, COLOR_BGR2GRAY); GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); Canny(edges, edges, 0, 30, 3); imshow(edges, edges); if(waitKey(30) 0) break; } return 0; } 由于视频帧分辨率和位深度对视频捕获模块是已知的因此阵列帧由操作员自动分配。阵列边缘由 cvtColor 函数自动分配。它与输入数组具有相同的大小和位深度。通道数为 1因为传递了颜色转换代码 cvCOLOR_BGR2GRAY这意味着颜色到灰度的转换。请注意在循环体的第一次执行期间帧和边缘只分配一次因为所有下一个视频帧都具有相同的分辨率。如果以某种方式更改视频分辨率则会自动重新分配阵列。 该技术的关键组件是 cvMatcreate 方法。它采用所需的数组大小和类型。如果数组已具有指定的大小和类型则该方法不执行任何操作。否则它会释放以前分配的数据如果有这部分涉及递减引用计数器并将其与零进行比较然后分配所需大小的新缓冲区。大多数函数为每个输出数组调用 cvMatcreate 方法因此实现了自动输出数据分配。 此方案的一些值得注意的例外是 cvmixChannels、cvRNGfill 以及其他一些函数和方法。他们无法分配输出数组因此您必须提前执行此操作。 饱和算术 作为一个计算机视觉库OpenCV 处理了很多图像像素这些像素通常以紧凑的每通道 8 位或 16 位形式编码因此具有有限的值范围。此外对图像的某些操作如色彩空间转换、亮度/对比度调整、锐化、复杂插值双立方、Lanczos可能会产生超出可用范围的值。如果仅存储结果的最低 8 16 位则会导致视觉伪影并可能影响进一步的图像分析。为了解决这个问题使用了所谓的饱和算术。例如要将操作结果 r 存储到 8 位图像中请在 0..255 范围内找到最接近的值 I(x,y)min(max(round(r),0),255) 类似的规则也适用于 8 位有符号类型、16 位有符号类型和无符号类型。此cv::saturate_cast语义在库中随处可见。在 C 代码中它是使用类似于标准 C 强制转换操作的函数完成的。请参阅下面提供的公式的实现 I.atuchar(y, x) saturate_castuchar(r); 其中 cvuchar 是 OpenCV 8 位无符号整数类型。在优化的SIMD代码中使用了paddusb、packuswb等SSE2指令。它们有助于实现与 C 代码中完全相同的行为。 注意 当结果为 32 位整数时不应用饱和度。 固定像素类型。模板的使用有限 模板是 C 的一项重要功能它支持实现非常强大、高效且安全的数据结构和算法。但是模板的广泛使用可能会大大增加编译时间和代码大小。此外当专门使用模板 cv::Ptrcv::saturate_cast时很难将接口和实现分开。这对于基本算法来说可能很好但对于计算机视觉库来说却不好因为单个算法可能跨越数千行代码。正因为如此也为了简化其他语言如 Python、Java、Matlab的绑定开发这些语言根本没有模板或模板功能有限当前的 OpenCV 实现基于多态性和模板上的运行时调度。在那些运行时调度速度太慢如像素访问运算符、不可能通用实现或非常不方便的地方当前的实现引入了小模板类、方法和函数。在当前 OpenCV 版本中的其他任何地方模板的使用都是有限的。 因此库可以操作的一组固定的原始数据类型有限。也就是说数组元素应具有以下类型之一 8-bit unsigned integer (uchar)8-bit signed integer (schar)16-bit unsigned integer (ushort)16-bit signed integer (short)32-bit signed integer (int)32-bit floating-point number (float)64-bit floating-point number (double)多个元素的元组其中所有元素都具有相同的类型上述元素之一。元素为此类元组的数组称为多通道数组与单通道数组相反单通道数组的元素为标量值。最大可能的通道数由 CV_CN_MAX 常量定义该常量当前设置为 512。 对于这些基本类型将应用以下枚举 enum { CV_8U0, CV_8S1, CV_16U2, CV_16S3, CV_32S4, CV_32F5, CV_64F6 }; 可以使用以下选项指定多通道n-channel类型 CV_8UC1 ... CV_64FC4 常量对于从1到4的多个通道CV_8UC(n) ... CV_64FC(n) or CV_MAKETYPE(CV_8U, n) ... CV_MAKETYPE(CV_64F, n)宏当通道数超过 4 个或编译时未知 注意 CV_32FC1 CV_32F, CV_32FC2 CV_32FC(2) CV_MAKETYPE(CV_32F, 2), and CV_MAKETYPE(depth, n) ((depth7) ((n-1)3). 这意味着常量类型是由深度取最低 3 位和通道数减去 1取下一位形成的 log2(CV_CN_MAX) bits. 例子 ​Mat mtx(3, 3, CV_32F); // make a 3x3 floating-point matrix Mat cmtx(10, 1, CV_64FC2); // make a 10x1 2-channel floating-point // matrix (10-element complex vector) Mat img(Size(1920, 1080), CV_8UC3); // make a 3-channel (color) image // of 1920 columns and 1080 rows. Mat grayscale(img.size(), CV_MAKETYPE(img.depth(), 1)); // make a 1-channel image of // the same size and same // channel type as img 具有更复杂元素的数组不能使用 OpenCV 构建或处理。此外每个函数或方法只能处理所有可能的数组类型的子集。通常算法越复杂支持的格式子集就越小。请参阅以下此类限制的典型示例 人脸检测算法仅适用于 8 位灰度或彩色图像。线性代数函数和大多数机器学习算法仅适用于浮点数组。基本函数如cvadd支持所有类型。色彩空间转换函数支持 8 位无符号、16 位无符号和 32 位浮点类型。 每个函数支持的类型子集都是根据实际需求定义的将来可以根据用户请求进行扩展。 输入数组和输出数组 许多 OpenCV 函数处理密集的二维或多维数值数组。通常此类函数cv::Mat 用作参数但在某些情况下std::vector使用起来更方便例如对于点集或cv::Matx用于 3x3 单调矩阵等。为了避免 API 中出现许多重复项引入了特殊的“代理”类。基“代理”类是 cv::InputArray。它用于在函数输入上传递只读数组。派生自 InputArray 类 cv::OutputArray 用于指定函数的输出数组。通常你不应该关心那些中间类型你不应该显式声明这些类型的变量——它们都会自动工作。您可以假定始终可以使用  cv::Mat, std::vector, cv::Matx, cv::Vec 或 cv::Scalar. 来代替 InputArray/OutputArray。当函数具有可选的输入或输出数组而您没有或不需要输入或输出数组时请传递  cv::noArray(). 错误处理 OpenCV 使用异常来发出严重错误的信号。当输入数据格式正确且属于指定值范围但算法由于某种原因无法成功例如优化算法未收敛时它会返回一个特殊的错误代码通常只是一个布尔变量。 异常可以是 cv::Exception 类或其派生的实例。反过来cv::Exception 是 的派生词。因此可以使用其他标准 C 库组件在代码中优雅地处理它。std::exception 通常使用宏CV_Error(errcode, description) 或其类似 printf 的 CV_Error_(errcode, (printf-spec, printf-args))变体引发异常或者使用 CV_Assertcondition 宏来检查条件并在不满足异常时引发异常。对于性能关键代码有 CV_DbgAssertcondition 仅保留在调试配置中。由于自动内存管理所有中间缓冲区都会在突然发生错误时自动释放。如果需要只需添加 try 语句即可捕获异常: ​try { ... // call OpenCV } catch (const cv::Exception e) { const char* err_msg e.what(); std::cout exception caught: err_msg std::endl; } 多线程和可再输入性 当前的 OpenCV 实现是完全可重新输入的。也就是说可以从不同的线程调用不同类实例的相同函数或相同方法。此外相同的 Mat 可以在不同的线程中使用因为引用计数操作使用特定于体系结构的原子指令。 参考文献 1、《Introduction》 --Generated on Wed Dec 27 2023 21:56:11 for OpenCV by   ​编辑
http://www.pierceye.com/news/392326/

相关文章:

  • 泰兴建设局网站wordpress资料图片不显示
  • 外贸推广免费网站图片 网站源码
  • 博客推广那个网站列好邢台网红桥
  • 艺之都网站建设微信app开发腾讯视频分享到wordpress
  • 洛阳最好的做网站的公司哪家好建网站需要哪些文件夹
  • 舟山企业网站建设导出wordpress用户
  • 肇庆新农村建设内容在哪个网站有关天猫网站开发的论文
  • 网站建设代码生成器php网站开发专员招聘
  • 视频教学网站cms陕西网站备案查询
  • 湖州网站设计浙北数据wordpress自定义搜索页面
  • 昆明公司网站开发流线型的网站建设
  • 南京建设网站企业泊头市建设网站
  • 前端跟后端哪个就业难北京网站建设seo优化
  • 简述网站开发建设的基本流程做一个京东这样的网站需要多少钱
  • 与通信工程专业做项目的网站微信开发显示wordpress
  • 自己做链接网站萍乡做网站哪家好
  • 做网站最适合用多大的图片医院 网站建设 新闻
  • 网站开发职业分析产品展示的手机网站
  • 精通网站建设pdf网上自学电脑课程
  • 一站式网站建设业务沈阳网站建设 熊掌号
  • 58同城网站建设目的劳务公司怎么注册需要什么要求
  • 龙华网站建设设计公司国家中小学智慧教育平台
  • 摄影网站采用照片做宣传_版权费是多少?pythom+网站开发规范
  • 免费制作一个自己的网站吗达内教育口碑怎么样
  • 2015做那个网站能致富网站建设模板ppt模板
  • 网站后台管理系统教程自助网站建设程序
  • 做黑帽需不需要搭建网站没有做等保的网站不能上线对吗
  • 怎么在微信建立公众号郑州专业seo首选
  • 万网网站后台国家域名
  • 怎么做 niche网站临港注册公司优惠政策