随手笔记——OpenCV 的基础使用方法

【OpenCV3编程入门学习笔记】——第1章 邂逅OpenCV 邂逅OpenCV 文章目录邂逅OpenCV前言1.1 OpenCV周边概念认知1.1.1 图像处理、计算机视觉与OpenCV1.1.2 OpenCV概述1.1.3 起源及发展1.1.4 应用概述1.2 OpenCV基本架构分析1.3 OpenCV3带来了什么1.4 OpenCV的下载、安装与配置1.5 快速上手OpenCV图像处理前期准备1.5.1 程序一 图像显示1.5.2 程序二 图像腐蚀1.5.3 程序三 图像模糊1.5.4 程序四 canny边缘检测1.6 OpenCV视频操作基础1.6.1 读取并 阅读详情

随手笔记——OpenCV 的基础使用方法

说明

演示了如下几个操作:图像读取、显示、像素遍历、复制、赋值等。大部分的注解已写在代码里面。编译该程序时,需要在 CMakeLists.txt 中添加 OpenCV 的头文件,然后把程序链接到库文件上。同时,由于使用了 C++ 11 标准(如 nullptr 和 chrono),还需要设置一下编译器。

CMakeLists.txt关键内容

cmake_minimum_required(VERSION 2.8)

set(CMAKE_BUILD_TYPE "Release")
# 添加c++ 11标准支持
set(CMAKE_CXX_FLAGS "-std=c++11 -O2")

# Eigen
include_directories("/usr/include/eigen3")

# 寻找OpenCV库
find_package(OpenCV REQUIRED)
# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})

add_subdirectory(imageBasics)

源代码

#include <iostream>
#include <chrono>

using namespace std;

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(int argc, char **argv) {
  // 读取argv[1]指定的图像
  cv::Mat image;
  image = cv::imread(argv[1]); //cv::imread函数读取指定路径下的图像

  // 判断图像文件是否正确读取
  if (image.data == nullptr) { //数据不存在,可能是文件不存在
    cerr << "文件" << argv[1] << "不存在." << endl;
    return 0;
  }

  // 文件顺利读取, 首先输出一些基本信息
  cout << "图像宽为" << image.cols << ",高为" << image.rows << ",通道数为" << image.channels() << endl;
  cv::imshow("image", image);      // 用cv::imshow显示图像
  cv::waitKey(0);                  // 暂停程序,等待一个按键输入

  // 判断image的类型
  if (image.type() != CV_8UC1 && image.type() != CV_8UC3) {
    // 图像类型不符合要求
    cout << "请输入一张彩色图或灰度图." << endl;
    return 0;
  }

  // 遍历图像, 请注意以下遍历方式亦可使用于随机像素访问
  // 使用 std::chrono 来给算法计时
  chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
  for (size_t y = 0; y < image.rows; y++) {
    // 用cv::Mat::ptr获得图像的行指针
    unsigned char *row_ptr = image.ptr<unsigned char>(y);  // row_ptr是第y行的头指针
    for (size_t x = 0; x < image.cols; x++) {
      // 访问位于 x,y 处的像素
      unsigned char *data_ptr = &row_ptr[x * image.channels()]; // data_ptr 指向待访问的像素数据
      // 输出该像素的每个通道,如果是灰度图就只有一个通道
      for (int c = 0; c != image.channels(); c++) {
        unsigned char data = data_ptr[c]; // data为I(x,y)第c个通道的值
      }
    }
  }
  chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
  chrono::duration<double> time_used = chrono::duration_cast < chrono::duration < double >> (t2 - t1);
  cout << "遍历图像用时:" << time_used.count() << " 秒。" << endl;

  // 关于 cv::Mat 的拷贝
  // 直接赋值并不会拷贝数据
  cv::Mat image_another = image;
  // 修改 image_another 会导致 image 发生变化
  image_another(cv::Rect(0, 0, 100, 100)).setTo(0); // 将左上角100*100的块置零
  cv::imshow("image", image);
  cv::waitKey(0);

  // 使用clone函数来拷贝数据
  cv::Mat image_clone = image.clone();
  image_clone(cv::Rect(0, 0, 100, 100)).setTo(255);
  cv::imshow("image", image);
  cv::imshow("image_clone", image_clone);
  cv::waitKey(0);

  // 对于图像还有很多基本的操作,如剪切,旋转,缩放等,限于篇幅就不一一介绍了,请参看OpenCV官方文档查询每个函数的调用方法.
  cv::destroyAllWindows();
  return 0;
}
[学习笔记-opencv篇]基础函数TermCriteria TermCriteria 一种用于迭代求解的函数。 cv::TermCriteria::TermCriteria ( int type, int maxCount, double epsilon) type:判定迭代终止的条件类型。 有3种形式: 1)TermCriteria::COUNT 最大迭代次数; 2)TermCriteria::EPS 要求的收敛阈值; 3)TermCriteria::COUNT + TermCriteria::EPS 达到2个条件之一即可。 maxCount:即最大迭代次数 阅读详情

相关推荐

OpenCV开发笔记(七):OpenCV基础图形绘制

若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101026612 目录 前言 Demo 基础绘制 绘制直线:line 绘制椭圆:ellipse 绘制矩形:rectangle 绘制圆形:circle ...

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 4万+

OpenCV3入门教程(一)基础知识

------韦访 20181011 1、概述 想学习图像处理,不管是机器学习也好,深度学习也好,不会点OpenCV好像有点说不过去吧?所以,现在开始OpenCV的学习。 2、读写图片 先从图片的读写开始,opencv读取图片的函数是imread,默认情况下,imread函数返回BGR格式的图像,可以用imwrite函数将数据写到本地。下面的代码会将JPG图片转成PNG。 import ...

韦访的专栏 4万+

KIBANA可视化管理界面说明

更说明转自https://blog.csdn.net/IT_ZRS/article/details/125496588 1 主要结构功能 使用浏览器访问 ip:5601 默认端口,进入首页 Discover:日志管理视图 主要进行搜索和查询 Visualize:统计视图 构建可视化的图表 Dashboard:仪表视图 将构建的图表组合形成图表盘 Timelion:时间轴视图 随着时间流逝的数据 APM:性能管理视图 应用程序的性能管理系统 Canvas:大屏展示

tian830937的专栏 7083

Android中使用OpenCV(二)

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

2401_87029491的博客 1233

GPU基准测试全攻略:从驱动验证到深度学习环境部署

GPU基准测试是评估显卡性能与稳定性的核心方法,其原理在于通过标准化负载程序,对GPU的计算单元、显存和散热系统进行压力测试。这项技术的价值在于,它能科学量化硬件性能,确保软件环境配置正确,为深度学习、科学计算等重负载任务提供稳定基础。在实际应用场景中,无论是新卡验机、排查深度学习环境问题(如“warning: no usable gpu found”报错),还是验证“PyTorch GPU版本安装”后的实际算力,系统的基准测试都是不可或缺的工程实践环节。通过结合通用计算测试与深度学习框架验证,用户可以提前

weixin_30080745的博客 343

OpenCLI入门:让任何网站变成你的命令行工具(超详细版)

最有用的工具,往往是最简单的。 opencli就是这样。 它不会帮你写代码,不会帮你做决策,但它能把200+个平台装进你的命令行。 让你用最简单的方式,获取最丰富的数据。

weixin_66295112的博客 2089

【Opencv】Opencv基本使用方法

Opencv基本使用方法 说明:刚开始学习Opencv,想每一步都有所记录。本文写的是Opencv的基本使用方法 文章目录Opencv基本使用方法1.图像调用1.1图像的输入1.2窗口的创建1.3图像的显示1.4图像的输出1.5注意问题2.滑动条的使用2.1滑动条的函数定义2.2回调函数的函数定义2.3滑动条的使用例子3.鼠标的使用4.应用举例 1.图像调用 1.1图像的输入 图像输入使用ope...

qq_41741344的博客 4714

QWEN 2.5模型结构解析与代码解读

对Qwen2.5大模型的代码进行研究

4362

OpenCV使用基础、技巧

OpenCV使用基础、技巧、安装、图形数字化、绘制图形、图形变换、图形检测、处理视频

weixin_44144773的博客 2174

目标检测YOLO实战应用案例100讲-基于YOLOv7的番茄采摘机械手场景感知及试验(下)

根据软件系统的设计需求,制定系统的可行性方案分析,编写系统的相关程序和 调试运行环境,对系统进行测试,以实现对番茄数据的采集及监测。登陆界面登陆后,进入选择界面,菜单包括了对番茄种植棚室的固定相机数据的监测、 对番茄采摘机械手的双目相机采集的番茄的静态、动态数据的获取、对番茄静态、动态数 据处理的功能菜单等选项。与利用人工去进行对于番茄果实的识别和数目的统计相比,番茄视觉系统自动记录番 茄数量以及红色已经成熟的番茄、青色未成熟番茄的数量,减轻人工记录的工作量,减少 人工记录的误差,从经济方面是可行的。

qq_36130719的博客 812

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1011

opencv android使用方法,如何在Android上使用opencv

2、创建Android应用或者在现有应用中,导入OpenCV模块导入目录时选择Opencv Android中的sdk / java目录3、修改导入的Opencv模块的build.gradle,使compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion与app的build.gradle中的一致。4、修改导入Opencv模块的...

weixin_31765677的博客 1235

45、使用 sqlread 函数将数据从数据库表导入 MATLAB

本文详细介绍了如何使用 MATLAB 中的 `sqlread` 函数从不同类型的数据库(如 Microsoft SQL Server 和 SQLite)中导入数据。文章涵盖了 `sqlread` 的基本语法、输入输出参数、使用示例以及注意事项,并通过多个实例演示了自定义导入选项、元信息检索和数据类型转换等内容。此外,还总结了导入数据库数据的通用流程及最佳实践建议,帮助用户更高效地进行数据分析和处理工作。

bash7scripter的博客 133

OPENCV下SIFT算法使用方法笔记

这几天继续在看Lowe大神的SIFT神作,看的眼花手脚抽筋。也是醉了!!!!实在看不下去,来点干货。我们知道opencv下自带SIFT特征检测以及MATCH匹配的库,这些库完全可以让我们进行傻瓜似的操作。但实际用起来的时候还不是那么简单。下文将对一个典型的基于OPENCV的SIFT特征点提取以及匹配的例程进行分析,并由此分析详细的对OPENCV中SIFT算法的使用进行一个介绍。OPENCV下SIFT

Xiangyue のblog 1832

C# Winform使用Monaco打造代码编辑器

本文介绍了如何在Winform项目中集成Monaco代码编辑器。通过NuGet安装WebView2控件,创建monaco-editor.html文件加载编辑器,并实现与C#代码的交互。关键步骤包括:初始化WebView2环境、配置Monaco编辑器参数、设置代码变更监听事件以及处理C#与JavaScript之间的通信。注意事项提示了依赖库安装问题的解决方法。该方案实现了功能完整的代码编辑器,支持代码自动保存和实时显示功能。

遇见--专栏 346

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

(学习笔记)opencv和dlib的基础操作

本篇文章将讲述作者对opencv和dlib基础操作的学习笔记。、

学姐带你玩AI的博客 1263

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【随手笔记】OpenCV python+vscode环境搭建

OpenCV python环境安装 在走过很多弯路之后,我发现,在使用anaconda安装OpenCV时,很容易会出现服务器不响应,毕竟隔着墙,而使用国内,如anaconda的清华源安装时,还是会出现个别服务器不响应,导致安装失败。、 而若是使用pip安装,没办法解决依赖问题,直接安装OpenCV的结果依旧是失败。 在尝试了很多办法之后,我最终还是找到了比较靠谱的方式。 参考链接:知乎教程 但是使用这种方法还是会出现个别的问题,那就是缺少了VideoCapture这个调用摄像头的库。因此还是得要解决依赖问题

下次你路过,人间已无我 2231

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HLS OPENCV各函数使用方法

1

weixin_50988214的博客 3509

OpenCV基础课程笔记01预备课

写在前面 这是笔者在学习贾志刚老师的OpenCV基础课的一些笔记,提供给个人以后在不同电脑查阅使用。因为给本人查看,所以并没有详细的注释。 差最后几节课没学完,因为实在是学不懂了,另外要开学了,所以,暂时先将其他笔记发出来,剩下的学校去在学。 图像处理太深奥了,涉及到好多数学理论。在学习时参考了大量优快云博客,还有数字图像处理的相关课程。 目前决定研究生走这个方向,学完这门课只是简单入门。 课程预备 笔记用到的图片 其中基本所有的图片都是网图,女友的图片太过性感,不予展示。所有实验中我用女友照片做素材的,

爱和九九的博客 232

jetson-nano opencv基础使用

前言: jetson nano前一篇给大家介绍了学习的一些思路和资料,今天继续给大家分享一篇在jetson nano使用opencv的文章。 OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。 在视觉处理中,opencv使用是基础的部分,所以在板卡使用过程中,opecv使用是.

良知犹存的博客 8051

opencv函数随手笔记

convertTo函数   实现的功能为:B=a∗A+bB = a * A + bB=a∗A+b  其中,a,b为标量,A,B 为 Mat;   实现代码:A.convertTo(B, CV_32F, a, b) split函数   实现的功能为:分离图片(Tensor)为通道(数组);   实现代码: void split(const Mat& src, Mat* mvbegin); s...

时光机 °的博客 211

Android平台使用OpenCV的方法

什么是OpenCV OpenCV是一个开源的视觉库,它实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV主要用C++语言编写,但是依然保留了大量的C语言接口,但是 所有新的开发和算法都是用C++接口。 在Android平台如何使用OpenCV 2.1. 使用Java OpenCV API 这种方法是直接通过Java 语言编写算法的实现部分,相对应的特点在于: 1.环境搭建简单:直...

huangling07031190的专栏 1348

小易的OpenCV-图像基础学习笔记

cv2.circle() 函数用于在图像上绘制圆形cv2.rectangle()函数用于在图像上绘制矩形cv2.putText()函数用于在图像上添加文本cv2.line()函数用于在图像上绘制直线9.2.1 read() 方法功能:从视频源中读取下一帧返回值:返回一个布尔值ret和图像帧frame。布尔值ret表示是否成功读取了帧,如果成功读取则为True,否则为False;图像帧frame是一个 NumPy 数组,代表当前读取的视频帧图像在循环中逐帧读取视频时使用,通过判断ret。

小易的博客 1179

OpenCV学习笔记——《OpenCV3编程入门》读书笔记

这篇读书笔记,主要记录我阅读《OpenCV3编程入门》的读书笔记,作者毛星云写的这本书十分适合接触OpenCV的初学者,虽然理论性的内容是简要概括,但还是可以大致的理解。。此书最好的就是提供了大量的完整例子的代码,对初学者入门相当有帮助,建议各位OpenCV的初学者可以认真阅读一下这本书,会对OpenCV的编程有个一个整体的初步认识。 OpenCV学习笔记     chap1 邂逅

lwq1026的博客 7982

OpenCV复习笔记

本文摘要:OpenCV图像处理核心知识总结,涵盖图像读取、基础操作、颜色空间转换、几何变换、阈值处理等关键内容。重点包括:1)静态/动态图像读取方法;2)鼠标交互绘制和颜色通道操作;3)5种阈值处理方法对比;4)轮廓检测全流程(预处理→检测→分析→绘制);5)作业常见场景应用(如作业1的矩形绘制、作业2的多变换组合、作业3的轮廓分析)。复习建议以三次作业代码为实践基础,重点掌握imread、cvtColor、threshold、findContours等高频API的参数和应用场景。(149字)

2201_75446108的博客 848

OpenCV4 快速入门笔记

《OpenCV4 快速入门》学习笔记

feichangyanse的博客 2080
上一篇: 随手笔记——单目相机的成像过程
下一篇: 随手笔记——实现去畸变部分的代码
JANGHIGH
博客等级 码龄16年 1万+粉丝 315原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值