Opencv实战(1)读取与图像操作

Opencv

文章目录

  • Opencv
    • 一、读取图片
      • 1.imshow
      • 2.namedWindow
      • 3.imshow
      • 4.效果图
    • 二、像素操作
      • (1).访问像素
        • 1. at()
        • 2.Mat_
      • (2).遍历像素
        • 1.指针遍历
        • 2.迭代器遍历
      • (3).threshold
      • (4).通道分离
        • 1.split
        • 2.merge
      • (5)Gamma矫正
    • 三、深浅拷贝

一、读取图片

1.imshow

Mat imread(const string& filename, intflags=1 );flags:
enum
{
/* 8bit, color or not */CV_LOAD_IMAGE_UNCHANGED  =-1,
/* 8bit, gray */CV_LOAD_IMAGE_GRAYSCALE  =0,
/* ?, color */CV_LOAD_IMAGE_COLOR      =1,
/* any depth, ? */CV_LOAD_IMAGE_ANYDEPTH   =2,
/* ?, any color */CV_LOAD_IMAGE_ANYCOLOR   =4
};Mat image0=imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像
Mat image1=imread("dota.jpg",0);//载入灰度图
Mat image2=imread("dota.jpg",199);//载入3通道的彩色图像
Mat logo=imread("dota_logo.jpg");//载入3通道的彩色图像
  • CV_LOAD_IMAGE_UNCHANGED,这个标识在新版本中被废置了,忽略。
  • CV_LOAD_IMAGE_ANYDEPTH- 如果取这个标识的话,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
  • CV_LOAD_IMAGE_COLOR- 如果取这个标识的话,总是转换图像到彩色一体
  • CV_LOAD_IMAGE_GRAYSCALE- 如果取这个标识的话,始终将图像转换成灰度

  • flags >0返回一个3通道的彩色图像。
  • flags =0返回灰度图像。
  • flags <0返回包含Alpha通道的加载的图像。

2.namedWindow

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE ); 
  • WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
  • WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
  • WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

3.imshow

void imshow(const string& winname, InputArray mat);

4.效果图

c++

python

二、像素操作

(1).访问像素

1. at()
image.at<uchar>(j,i)= value;  //单通道
image.at<cv::Vec3b>(j,i)[channel]= value;  //三通道
image.at<cv::Vec3b>(j,i) = cv::Vec3b(a,b,c);
2.Mat_
cv::Mat_<uchar> image(image1);
image(20,30) = value;

(2).遍历像素

1.指针遍历
uchar *data = image.ptr<uchar>(i);  //ptr()返回行的地址
for (int i = 0; i < height; i++) {cv::Vec3b* row = image.ptr<cv::Vec3b>(i);for (int j = 0; j < width; j++) {cv::Vec3b& pixel = row[j];//Vec3b&直接操作图像中的像素值,而不需要创建新的对象std::cout << "Pixel at (" << i << "," << j << "): "<< "B=" << (int)pixel[0] << " "<< "G=" << (int)pixel[1] << " "<< "R=" << (int)pixel[2] << std::endl;}
}
2.迭代器遍历
cv::MatIterator_ <cv::Vec3b> it;
或者
cv::Mat_<cv::Vec3b>::iterator it;
cv::MatIterator_<cv::Vec3b> it, end;
for (it = image.begin<cv::Vec3b>(), end = image.end<cv::Vec3b>(); it != end; ++it) {cv::Vec3b& pixel = *it;pixel[0] = 255; pixel[1] = 0; pixel[2] = 0; 
}

python

c++

(3).threshold

double cv::threshold(src, OutputArray, thresh, maxval, type)

在这里插入图片描述

c++:

在这里插入图片描述

python:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(4).通道分离

1.split
C++: void split(const Mat& src, Mat*mvbegin);
C++: void split(InputArray m,OutputArrayOfArrays mv);
2.merge
C++: void merge(const Mat* mv, size_tcount, OutputArray dst)
C++: void merge(InputArrayOfArrays mv,OutputArray dst)

c++
在这里插入图片描述

python

在这里插入图片描述

(5)Gamma矫正

Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系。Gamma矫正用于调整图像的亮度和对比度。Gamma矫正可以改变图像的灰度值分布,使图像在显示时看起来更加自然和逼真。通常情况下,人眼对亮度的感知是非线性的,因此使用Gamma矫正可以更好地模拟人眼的感知特性。
V o u t = A V i n γ V_{out}=AV_{in}^\gamma Vout=AVinγ
γ的值决定了输入图像和输出图像之间的灰度映射方式,即决定了是增强低灰度值区域还是增高灰度值区域。
γ>1时,图像的高灰度区域对比度得到增强,直观效果是一幅偏亮的图变暗了下来。
γ<1时,图像的低灰度区域对比度得到增强,直观效果是一幅偏暗的图变亮了起来。

python

在这里插入图片描述

c++

在这里插入图片描述

三、深浅拷贝

浅拷贝是指当图像之间进行赋值时,图像数据并未发生复制,而是两个对象都指向同一块内存块。

深拷贝是指新创建的图像拥有原始图像的崭新拷贝

c++

在这里插入图片描述

python

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DS:八大排序之归并排序、计数排序

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、归并排序 1.1 思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子…

【cmu15445c++入门】(9)C++ 智能指针shared_ptr

一、智能指针shared_ptr std::shared_ptr 是一种智能指针&#xff0c;它通过指针保留对象的共享所有权。这意味着多个共享指针可以拥有同一个对象&#xff0c;并且可以复制共享指针。 二、代码 // In this file, well talk about std::shared_ptr, which is a C smart pointer…

LeetCode 第385场周赛个人题解

目录 100212. 统计前后缀下标对 I 原题链接 题目描述 接口描述 思路分析 代码详解 100229. 最长公共前缀的长度 原题链接 题目描述 接口描述 思路分析 代码详解 100217. 出现频率最高的素数 原题链接 题目描述 接口描述 思路分析 代码详解 100212. 统计前后缀…

氢氧化铝市场研究:预计2029年将达到15亿美元

近年来&#xff0c;随着全球工业和建筑业的快速发展&#xff0c;氢氧化铝的需求不断增加。特别是在汽车、航空航天、电子产品等行业中&#xff0c;氢氧化铝的应用越来越广泛。此外&#xff0c;环境意识的提升也推动了氢氧化铝市场的增长&#xff0c;因为其可回收再利用的特性符…

【C++】C++11中

C11中 1.lambda表达式2.可变参数模板3.包装器 1.lambda表达式 在前面我们学习过仿函数。仿函数的作用到底是干什么的呢&#xff1f; 它为了抛弃函数指针&#xff01; 主要是因为函数指针太难学了 就比如下面这个&#xff0c;看着也挺难受的。 它的参数是一个函数指针&#x…

使用XTuner微调书生·浦语2大模型实战

一、XTuner安装 1、代码准备 mkdir project cd project git clone https://github.com/InternLM/xtuner.git 2、环境准备 cd xtuner pip install -r requirements.txt #从源码安装 pip install -e .[all] 3、查看配置文件列表 XTuner 提供多个开箱即用的配置文件&#xf…

Python 二维矩阵加一个变量运算该如何避免 for 循环

Python 二维矩阵加一个变量运算该如何避免 for 循环 引言正文方法1------使用 for 循环方法2------不使用 for 循环引言 今天写代码的时候遇到了一个问题,比如我们需要做一个二维矩阵运算,其中一个矩阵是 2x2 的,另一个是 2x1 的。在这个二维矩阵中,其中各个参数会随着一个…

devc++跑酷小游戏3.0.0

导航&#xff1a; Dev-c跑酷小游戏 1.0.0 devc跑酷小游戏1.2.5 devc跑酷游戏1.2.6 devc跑酷游戏2.0.0 devc跑酷游戏2.0.1 devc跑酷游戏2.4.0 【更新内容每日废话】 关卡数量没变&#xff0c;每个都微调了一下。作者再此保证能过&#xff0c;都测试过&#xff0c;过不了…

怎样保证数据库和redis里的数据一致性

使用缓存更新策略&#xff1a;在更新数据库时&#xff0c;同时更新Redis中相应的数据。这可以通过编写代码来实现&#xff0c;在数据库更新操作完成后&#xff0c;同步更新Redis中对应的数据。这可以通过在代码中使用事务来保证更新的原子性&#xff0c;确保数据库和Redis中的数…

2月19日

ApplicationContextInitializer SpringBoot 框架在设计之初&#xff0c;为了有更好的兼容性&#xff0c;在不同的运行阶段&#xff0c;提供了非常多的可扩展点&#xff0c;可以让程序员根据自己的需求&#xff0c;在整个Spring应用程序运行过程中执行程序员自定义的代码Applic…

贪心+堆维护,HDU1789Doing Homework again

一、题目 1、题目描述 Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after the deadline, the teacher will reduc…

【深蓝学院】移动机器人运动规划--第5章 最优轨迹生成--笔记

文章目录 1. Preliminaries2. Multicopter dynamics and differential flatness&#xff08;多旋翼动力学和微分平坦特性&#xff09;2.1 Differential Flatness2.2 具体建模2.3 Flatness Transformation的解析推导 3. Trajectory Optimization轨迹优化3.1 Problem formulation…

C++学习Day06之继承中的同名成员处理

目录 一、程序及输出1.1 同名成员变量1.2 同名成员函数 二、分析与总结 一、程序及输出 1.1 同名成员变量 #include<iostream> using namespace std;class Base { public:Base(){this->m_A 10;}void func(){cout << "Base中的func调用" << e…

“利用电子医院记录,针对急性护理环境中的老年人,开发并验证了一项医院脆弱风险评分:一项观察性研究“

总结 背景 年长者在全球范围内成为医疗保健的增长用户。我们的目标是确定是否可以利用常规收集的数据来识别具有虚弱特征并面临不利健康结果风险的年长者。 方法 使用三步方法开发和验证了一种医院脆弱风险评分&#xff0c;该评分基于《国际疾病和相关健康问题统计分类第十次修…

摆(行列式、杜教筛)

有一个 n n n\times n nn 的矩阵 A A A&#xff0c;满足&#xff1a; A i , j { 1 i j 0 i ̸ j ∧ i ∣ j C otherwise A_{i,j}\begin{cases} 1 &ij\\ 0 &i\notj\land i\mid j\\ C &\text{otherwise} \end{cases} Ai,j​⎩ ⎨ ⎧​10C​ijij∧i∣jotherwi…

FPGA时钟资源与设计方法——时钟抖动(jitter)、时钟偏斜(skew)概念讲解

目录 1时钟抖动&#xff08; clock jitter&#xff09;2 时钟偏斜&#xff08;clock skew&#xff09; 1时钟抖动&#xff08; clock jitter&#xff09; 时钟抖动&#xff08;Jitter&#xff09;&#xff1a;时钟抖动指的是时钟周期的不稳定性&#xff0c;即&#xff1a;时钟…

Milvus向量库安装部署

GitHub - milvus-io/milvus-sdk-java: Java SDK for Milvus. 1、安装Standstone 版本 参考&#xff1a;Linux之milvus向量数据库安装_milvus安装-CSDN博客 参考&#xff1a;Install Milvus Standalone with Docker Milvus documentation 一、安装步骤 1、安装docker docke…

使用八爪鱼爬取京东商品详情页数据

文章目录 一、前述1.1、采集场景1.2、采集字段1.3、采集结果1.4、采集工具 二、采集步骤2.1、登录网站2.1.1、登录入口2.1.2、京东账号登录2.1.3、登录完成 2.2、自动识别2.3、选取爬取的内容2.4、处理数据2.4.1、纵向字段布局2.4.2、更多字段操作2.4.3、格式化数据2.4.4、添加…

OpenAI最新模型Sora到底有多强?眼见为实的真实世界即将成为过去!

文章目录 1. 写在前面2. 什么是Sora&#xff1f;3. Sora的技术原理 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感…

@ 代码随想录算法训练营第7周(C语言)|Day42(动态规划)

代码随想录算法训练营第7周&#xff08;C语言&#xff09;|Day42&#xff08;动态规划&#xff09; Day42、动态规划&#xff08;包含题目 416. 分割等和子集 &#xff09; 416. 分割等和子集 题目描述 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集&…