随手笔记——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万+

C语言实战:最小二乘法在传感器数据校准中的应用(附完整代码)

本文详细介绍了如何使用C语言实现最小二乘法,对传感器数据进行线性校准。通过模拟带噪声的传感器数据,手把手演示了从核心算法实现、参数计算到效果验证的完整流程,并提供了可直接编译运行的完整源码,帮助嵌入式开发者解决传感器数据不准的常见问题,提升系统测量精度。

weixin_28025327的博客 515

Android中使用OpenCV(二)

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

2401_87029491的博客 1233

AFSim仿真系统—几何视角下的子系统交互机制解析

本文深入解析了AFSim仿真系统中子系统交互的几何机制。通过剖析世界坐标系、实体坐标系、部件坐标系等七层空间定位体系,阐述了传感器探测、目标指示等交互行为背后的几何原理与限制条件。掌握这套几何视角,是构建高保真、符合物理现实的AFSim仿真模型的关键,能有效避免坐标混乱、交互失效等常见问题。

terraform7cloud的博客 490

ZYNQ平台上基于PHY芯片的IEEE1588/PTP高效实现方案

本文详细解析了在Xilinx ZYNQ平台上,如何通过选用支持IEEE1588/PTP的专用PHY芯片(如RTL8211FS-VS-CG、DP83640)来实现高精度时间同步的高效方案。文章对比了PS端与PL端MAC连接的优劣,提供了从硬件选型、接口设计、Linux驱动适配到PTP协议栈配置与性能优化的完整实战指南,并总结了关键避坑经验,为工业网络、电力系统等需要纳秒级同步的应用提供了清晰、可靠的实施路径。

kkk56的博客 1091

【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

深入理解C++23的Deducing this特性(上):基础概念与语法详解

C++23标准中引入的"Deducing this"特性是一项重大革新,它不仅改变了我们编写成员函数的方式,还为模板元编程和设计模式实现带来了新的可能。

weixin_61470881的博客 1332

OpenCV使用基础、技巧

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

weixin_44144773的博客 2174

算法 | 植物根茎生长优化算法(PRGO)原理、公式及应用,matlab代码(2025最强优化算法)

【代码】算法 | 植物根茎生长优化算法(PRGO)原理、公式及应用,matlab代码(2025最强优化算法)

尘世冰封的专栏 1015

【RT-DETR涨点改进】小目标检测、特征融合改进篇 | TGRS 2024 | RT-DETR引入CSFM上下文选择融合模块,适合多模态检测、红外小目标检测、小目标检测、遥感目标检测等任务有效涨点

本文提出了一种改进RT-DETR目标检测模型的方法,通过引入上下文选择融合模块(CSFM)显著提升复杂背景下小目标和低对比度目标的检测精度。CSFM模块采用多尺度特征融合和动态特征选择机制,有效增强模型的全局上下文感知能力,同时保留细节特征。该模块通过通道减少机制和空间信息调节,实现从粗到细的特征聚合,减少误报并提高轮廓检测精度。实验表明,改进后的RT-DETR模型在多个基准测试中表现优异,计算效率与检测精度均优于现有方法。文章还详细介绍了模块配置和yaml文件修改方法,为模型部署提供指导。

Ai缝合怪、助力小伙伴高效发论文 1723

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

YoloV8优化:感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等 | 即插即用系列

感受野注意力卷积运算(RFAConv),解决卷积块注意力模块(CBAM)和协调注意力模块(CA)只关注空间特征,不能完全解决卷积核参数共享的问题

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4264

OPENCV下SIFT算法使用方法笔记

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

Xiangyue のblog 1832

【声纳技术】声呐时间反转镜技术:从被动聚焦到主动空间复用

时间反转镜技术以其独特的物理机制,为水声通信与声呐探测提供了一条绕过传统自适应均衡器的新路径。被动时间反转利用接收端的空间分集实现脉冲压缩,结构简洁、计算高效;主动时间反转则通过发射端预编码,将多径能量引导至目标位置,为多用户下行链路的空间复用奠定了物理基础。从Kuperman等人在海洋中首次验证声学时间反转镜,到TR-MIMO声呐的湖试验证,再到VTRM-CRK多用户通信系统的海试成功,该技术已从理论概念逐步走向工程实用。

u012133341的博客 55

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

学姐带你玩AI的博客 1263

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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、付费专栏及课程。

余额充值