openCV图像的读写操作
文章目录
- 一、数组下标
- 二、指针
void QuickDemo::pixel_visit_demo(cv::Mat &image)
{int w = image.cols;int h = image.rows;int dim = image.channels();for (int row = 0; row < h; row++){for (int col = 0; col < w; col++){if (dim == 1)//灰度图像{int pv = image.at<uchar>(row,col);//像素是字节类型image.at<uchar>(row, col) = 255 - pv;}if (dim == 3)//彩色图像{Vec3b bgr = image.at<Vec3b>(row, col);image.at<Vec3b>(row, col)[0] = 255 - bgr[0];image.at<Vec3b>(row, col)[1] = 255 - bgr[1];image.at<Vec3b>(row, col)[2] = 255 - bgr[2];}}}for (int row = 0; row < h; row++){uchar* current_row = image.ptr<uchar>(row);for (int col = 0; col < w; col++){if (dim == 1)//灰度图像{int pv = *current_row;*current_row++ = 255 - *current_row;}if (dim == 3)//彩色图像{*current_row++ = 255 - *current_row;*current_row++ = 255 - *current_row;*current_row++ = 255 - *current_row;}}}imshow("像素读写", image);
}
一、数组下标
for (int row = 0; row < h; row++){for (int col = 0; col < w; col++){if (dim == 1)//灰度图像{int pv = image.at<uchar>(row,col);//像素是字节类型image.at<uchar>(row, col) = 255 - pv;}if (dim == 3)//彩色图像{Vec3b bgr = image.at<Vec3b>(row, col);image.at<Vec3b>(row, col)[0] = 255 - bgr[0];image.at<Vec3b>(row, col)[1] = 255 - bgr[1];image.at<Vec3b>(row, col)[2] = 255 - bgr[2];}}}
- 如果图像是灰度图像(通道数为1),则使用.at(row, col)来访问像素值,并将像素值取反后写回图像
- 如果图像是彩色图像(通道数为3),则使用.at(row, col)来访问像素值。将每个通道的像素值取反后写回图像
二、指针
for (int row = 0; row < h; row++){uchar* current_row = image.ptr<uchar>(row);for (int col = 0; col < w; col++){if (dim == 1)//灰度图像{int pv = *current_row;*current_row++ = 255 - *current_row;}if (dim == 3)//彩色图像{*current_row++ = 255 - *current_row;*current_row++ = 255 - *current_row;*current_row++ = 255 - *current_row;}}}
- 对于灰度图像,使用指针current_row指向当前行的数据指针,然后通过*current_row++的方式逐个访问像素值,并将像素值取反后写回图像
- 对于彩色图像,同样使用指针current_row指向当前行的数据指针,然后通过*current_row++的方式逐个访问每个通道的像素值,并将像素值取反后写回图像
推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:
C++初级课程链接:
https://ke.qq.com/course/444655?flowToken=1043280
Qt课程链接:
https://ke.qq.com/course/444655?flowToken=1044614
相关文章:
openCV图像的读写操作
文章目录 一、数组下标二、指针 void QuickDemo::pixel_visit_demo(cv::Mat &image) {int w image.cols;int h image.rows;int dim image.channels();for (int row 0; row < h; row){for (int col 0; col < w; col){if (dim 1)//灰度图像{int pv image.at<…...
Android平台GB28181设备接入端如何降低资源占用和性能消耗
背景 我们在做GB28181设备接入模块的时候,考虑到好多设备性能一般,我们一般的设计思路是,先注册设备到平台侧,平台侧发calalog过来,获取设备信息,然后,设备侧和国标平台侧维持心跳,…...
Android Studio安装AI编程助手Github Copilot
csdn原创谢绝转载 简介 文档链接 https://docs.github.com/en/copilot/getting-started-with-github-copilot 它是个很牛B的编程辅助工具,装它,快装它. 支持以下IDE: IntelliJ IDEA (Ultimate, Community, Educational)Android StudioAppC…...
windows部署springboot项目 jar项目 (带日志监听和开机自起脚本)
windows部署springboot项目 jar项目 (带日志监听) 1.把项目打包成jar包,本例演示打包后的jar文件名为demo.jar ———————————————— 2.需要装好java环境,配置好JAVA_HOME,CLASSPATH,PATH等…...
【数据结构和算法】排序算法
说明:以下排序如无特别说明,都是从小到大升序排序 1. 冒泡排序 核心思想:每个元素与其相邻元素比较,如果前者大于后者则交换,每次循环结束后会将最大值放到最后,像小水泡从底下冒到上面成大水泡一样&…...
Error: Cannot find module ‘@babel/core’处理
Error: Cannot find module babel/core’处理 问题产生的原因如何解决 在安装babel的时候,遇到个**Error: Cannot find module babel/core’**问题,查了很多资料才解决,希望能够帮助到各位兄弟。 问题产生的原因 babel-loader和babel-core版…...
K8S系列文章之 自动化运维利器 Fabric
Fabric 主要用在应用部署与系统管理等任务的自动化,简单轻量级,提供有丰富的 SSH 扩展接口。在 Fabric 1.x 版本中,它混杂了本地及远程两类功能;但自 Fabric 2.x 版本起,它分离出了独立的 Invoke 库,来处理…...
flask--->CBV/模板/请求响应/session
CBV 1 cbv写法-1 写个类,继承MethodView-2 在类中写跟请求方式同名的方法-3 注册路由:app.add_url_rule(/home, view_funcHome.as_view(home)) #home是endpoint,就是路由别名2 cbv加装饰器-方式一:class Home(MethodView):decor…...
Go语言基础:运算符、文件操作、接口、Packages、if else、for循环
文章目录 1.运算符2.文件操作3.接口4.Packages5.If else6.For循环 1.运算符 func main() {// 算术运算符a, b : 3, 7c : a bd : a - be : a * bf : a / bg : a % baa--fmt.Println(c, d, e, f, g)// 关系运算符fmt.Println(a b)fmt.Println(a ! b)fmt.Println(a < b)fmt.…...
2308C++学习简单协程文档
调试 用gdb/lldb p __coro_frame p __promise试 Try有三种状态:无状态,有异常,有值. 条件变量 主要区别在简单异步中条件变量面向Lazy协程.在条件变量上阻塞协程时,不会阻塞当前线程.用于多个协程间交互协作.基于协程版条件变量,多个协程可实现典型生产者消费者模型. 通知…...
C++笔记之从数组指针到函数数组指针(使用using name和std::function)
C笔记之从数组指针到函数数组指针(使用using name和std::function) 参考笔记: C之指针探究(三):指针数组和数组指针 C之指针探究(十三):函数指针数组 C之指针探究(二):一级指针和一维数组 C之指针探究(十一):函数名的…...
【数据结构】常见的排序算法
常见的排序算法 常见的排序算法插入排序之直接插入排序时间复杂度特性总结 插入排序之希尔排序时间复杂度 选择排序之直接选择排序特性总结 选择排序之堆排序时间复杂度特性总结 交换排序之冒泡排序特性总结 交换排序之快速排序hoare版本挖坑法双指针法快速排序的优化1…...
CentOS 安装 Jenkins
本文目录 1. 安装 JDK2. 获取 Jenkins 安装包3. 将安装包上传到服务器4. 修改 Jenkins 配置5. 启动 Jenkins6. 打开浏览器访问7. 获取并输入 admin 账户密码8. 跳过插件安装9. 添加管理员账户 1. 安装 JDK Jenkins 需要依赖 JDK,所以先安装 JDK1.8。输入以下命令&a…...
前端如何设置表格边框样式和单元格间距?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现思路⭐ 代码演示⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴…...
Ubuntu 22.04安装搜狗输入法
Ubuntu 22.04安装搜狗输入法 ubtuntu 22.04安装搜狗输入法 1. 添加中文语言支持2. 安装fcitx输入法框架3. 设置fcitx为系统输入法4. 设置fcitx开机启动,并卸载ibus输入法框架5. 安装搜狗输入法6. 重启电脑,调出搜狗输入法 1. 添加中文语言支持 Setti…...
【C++】初阶 --- 内联函数(inline)
文章目录 🥞内联函数🍟1、C语言实现"宏函数"🍟2、内联函数的概念🍟3、内联函数的特性🍟4、总结 🥞内联函数 🍟1、C语言实现"宏函数" 🥰用C语言先来实现普通的…...
VGGNet剪枝实战:使用VGGNet训练、稀疏训练、剪枝、微调等,剪枝出只有3M的模型
摘要 本文讲解如何实现VGGNet的剪枝操作。剪枝的原理:在BN层网络中加入稀疏因子,训练使得BN层稀疏化,对稀疏训练的后的模型中所有BN层权重进行统计排序,获取指定保留BN层数量即取得排序后权重阈值thres。遍历模型中的BN层权重&am…...
【iOS】GCD深入学习
关于GCD和队列的简单介绍请看:【iOS】GCD学习 本篇主要介绍GCD中的方法。 栅栏方法:dispatch_barrier_async 我们有时候需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作,当然操作组里也可以包含一个或者…...
Webpack开启本地服务器;HMR热模块替换;devServer配置;开发与生成环境的区分与配置
目录 1_开启本地服务器1.1_开启本地服务器原因1.2_webpack-dev-server 2_HMR热模块替换2.1_认识2.2_开启HMR2.3_框架的HMR 3_devServer配置3.1_host配置3.2_port、open、compress 4_开发与生成环境4.1_如何区分开发环境4.2_入口文件解析4.3_区分开发和生成环境配置 1_开启本地服…...
opencv 31-图像平滑处理-方框滤波cv2.boxFilter()
方框滤波(Box Filtering)是一种简单的图像平滑处理方法,它主要用于去除图像中的噪声和减少细节,同时保持图像的整体亮度分布。 方框滤波的原理很简单:对于图像中的每个像素,将其周围的一个固定大小的邻域内…...
《跨摄像机追踪的终局:镜像视界空间计算方案深度解析》——从“识别与匹配”走向“空间计算与连续存在”的最终形态
跨摄像机追踪的终局:镜像视界空间计算方案深度解析——从“识别与匹配”走向“空间计算与连续存在”的最终形态发布单位:镜像视界(浙江)科技有限公司一、问题终局:跨摄像机追踪到底要解决什么?在过去十年中…...
量化文明:贾子理论(Kucius Theory)CVC/WVC方程揭示可持续性密码
量化文明:贾子理论(Kucius Theory)CVC/WVC方程揭示可持续性密码摘要:贾子理论通过文明方程(CVC/WVC)构建数理模型,量化文明价值与智慧资本。核心公式以意义、能量、时间积分定义CVC,…...
SAP增强开发实战:如何用STARTING NEW TASK避免BAPI_TRANSACTION_COMMIT的坑?
SAP增强开发实战:如何用STARTING NEW TASK避免BAPI_TRANSACTION_COMMIT的坑? 在SAP标准增强开发中,当我们需要在出口函数里调用BAPI修改或创建业务单据时,总会遇到一个经典难题:如何在增强点安全地提交事务?…...
深入解析STM32 SysTick定时器:从原理到时间片轮询实战
1. SysTick定时器的前世今生 第一次接触STM32的开发板时,我就被这个叫做SysTick的神秘定时器吸引了。当时我正为如何实现精确延时发愁,GPIO翻转测试显示软件延时误差高达30%,直到一位资深工程师提醒我:"内核里就藏着个高精度…...
聚焦 AI 智能体:2026年上市企业综合竞争力全景盘点
随着人工智能技术的深度渗透,AI智能体正从概念走向规模化应用,成为企业数字化转型的核心引擎。在A股市场中,多家上市公司积极布局AI智能体赛道,凭借各自的技术积淀与行业理解,推出了差异化的产品与服务。本文将聚焦五家…...
Nano Banana Images API 集成指南
本文将介绍如何集成和使用 Nano Banana Images API。这一接口支持两种功能:图像生成 (generate) 和 图像编辑 (edit)。无论是创建独特的艺术作品,还是对现有图像进行修改,Nano Banana 都能满足您的需求。 环境准备 在使用该 API 之前&#…...
深蓝词库转换终极指南:30+输入法格式一键互转教程
深蓝词库转换终极指南:30输入法格式一键互转教程 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 深蓝词库转换(imewlconverter)是…...
别只刷题了!用Python/C++搞定考研机试高频算法(附PIPIOJ真题代码重构与优化)
从暴力解法到优雅实现:Python/C双语言拆解考研机试高频算法 考研机试不仅考察算法理解,更检验工程化编码能力。许多考生能写出正确但冗长的代码,却在时间优化和代码简洁性上失分。本文将用Python和C对比实现六大高频题型,重点分析…...
8人SolidWorks研发共享一台服务器——性能算力共享智能按需分配
8人SolidWorks研发团队可借助云飞云智能共享云桌面,通过以下方式实现一台服务器的性能算力共享与智能按需分配。一、核心硬件配置CPU:选择多核高主频处理器,如Intel Core i9 14900K(24核32线程)或AMD锐龙9 9950X&#…...
手把手教你用SAM2和LoRA:基于CVPR25新思路的开放词汇分割实战(附代码)
手把手教你用SAM2和LoRA:基于CVPR25新思路的开放词汇分割实战(附代码) 开放词汇语义分割(Open-Vocabulary Semantic Segmentation)正成为计算机视觉领域的热点方向。传统语义分割模型受限于预定义的封闭类别ÿ…...
