opencv4,cv2操作教程

解决 cv_bridge 与 opencv4 版本冲突问题 解决了在 ROS 下 cv_bridge 与 opencv 版本冲突导致的 opencv 操作报错:Segmentation fault (core dumped) 问题。 阅读详情

1.图片加载

cv2.imread(filename, flags=None)

2、显示图片

cv2.imshow(winname, mat)
winname 图口名称
mat ,已加载图片的变量名

3、图像显示窗口创建与销毁,

cv2.namedWindow(窗口名,属性) 创建一个窗口
属性—指定窗口大小模式:
cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小
cv2.WINDOW_NORMAL:窗口大小可调整
cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

如图不设定直接调用imshow窗口是不可改变的

4、图片宽、高、通道数获取
img.shape 返回图像高(图像矩阵的行数)、宽(图像矩阵的列数)和通道数3个属性组成的元组,若图像是非彩色图,则只返回高和宽组成的元组。
5、图像像素数目和图像数据类型的获取
图像矩阵img的size属性和dtype分别对应图像的像素总数目和图像数据类型。一般情况下,图像的数据类型是uint8。

6、生成指定大小的空图像

import numpy as np
imgFix = np.zeros((300, 500, 3), np.uint8)

imgFix = np.zeros((300,500),np.uint8)

7、访问和操作图像像素
通过操作vc对像OpenCV中图像矩阵的顺序是B、G、R。可以直接通过坐标位置访问和操作图像像素。

numb = img[50,100] #读取坐标点的像素值
print( numb) #[231 220 222]
 numb3 = img[0:100, 100:200]  # 读取像素块的值
print (numb3)
 
img[50,100] = (0,0,255) #设定坐标点的像素值

8、分开访问和修改图像某一通道像素值

numb2 = img[50, 100,0]  # 读取坐标点的指定通道的像素值
print (numb2)#(231)
imgFix[0:100, 100:200, 0] = 255  #从坐标点0,100 到100,200 都的像素块的第一通道都设成255
imgFix[100:200, 200:300, 1] = 255
imgFix[200:300, 300:400, 2] = 255
cv2.imshow("change", imgFix)

9、 图像三通道分离和合并
分离图像通道可以使用cv2中的split函数,合并使用merge函数。

10、 在图像上输出文字
使用putText函数在图片上输出文字,函数原型:

putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

参数:
img: 图像
text:要输出的文本
org: 文字的起点坐标
fontFace: 字体
fontScale: 字体大小
color: 字体颜色
thickness: 字图加粗

11、 图像缩放
缩放使用cv2.resize()函数,resize函数里的size第一个是宽(列),第二个是高(行)

cv2.resize(img, (200, 100))

12、图片裁剪

cropped = img[0:128, 0:512]  # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite("./data/cut/cv_cut_thor.jpg", cropped)
import cv2
# 加载图片110.jpg
img = cv2.imread("d:/temp/material/video/1/110.jpg")
# 生成灰色图片,第二个参数"0"表示灰度图片
imgGrey = cv2.imread("d:/temp/material/video/1/110.jpg", 0)
#  展示原图
cv2.imshow("img", img)
#  展示灰色图片
cv2.imshow("imgGrey", imgGrey)

#图片宽、高、通道数获取
sp1 = img.shape
sp2 = imgGrey.shape
print(sp1)#(720, 1270, 3)
print(sp2)#(720, 1270)

#图像像素数目和图像数据类型的获取
imgSize = img.size
print(imgSize)#2743200
ty = img.dtype
print(ty)#uint8
#生成指定大小的空图像
imgZero = np.zeros(img.shape, np.uint8)
imgFix = np.zeros((300, 500, 3), np.uint8)
cv2.imshow("imgZero", imgZero)
cv2.imshow("imgFix", imgFix)
#访问和操作图像像素
numb = img[50,100] #读取坐标点的像素值
print numb
numb3 = img[0:100, 100:200]  # 读取像素块的值
print (numb3)
iimgFix[50, 100] = (0, 0, 255)  # 设定坐标点的像素值
cv2.imshow("change", imgFix)
imgFix[0:100, 100:200, 0] = 255  #从坐标点0,100 到100,200 都的像素块的第一通道都设成255
imgFix[100:200, 200:300, 1] = 255
imgFix[200:300, 300:400, 2] = 255
cv2.imshow("change", imgFix)
#更改图像某一矩形区域的像素值
img[0:50,1:100] = (0,0,255)
 cv2.imshow("img",img)
#图像三通道分离和合并
b , g , r = cv2.split(img)
#也可以分开写
# b = cv2.split(img)[0]
# g = cv2.split(img)[1]
# r = cv2.split(img)[2]
merged = cv2.merge([b,g,r])
cv2.imshow("Blue",b)
cv2.imshow("Green",g)
cv2.imshow("Red",r)
 cv2.imshow("Merged",merged)

#调整图片大小

imgg = cv2.resize(img, (200, 100))
cv2.imshow("imgg", imgg)

等待图片的关闭

cv2.waitKey()

保存灰色图片

cv2.imwrite("Copy.jpg", imgGrey)

VideoCapture 读取视频
一、语法:cap = cv2.VideoCapture(0)
说明:参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:cap=cv2.VideoCapture(‘video.mp4’)

二、语法:cap.isOpened()
说明:判断视频对象是否成功读取,成功读取视频对象返回True。

三、语法:ret,frame = cap.read()
说明:按帧读取视频,返回值ret是布尔型,正确读取则返回True,读取失败或读取视频结尾则会返回False。frame为每一帧的图像,这里图像是三维矩阵,即frame.shape = (640,480,3),读取的图像为BGR格式。

四、语法:key = cv2.waitKey(1)
说明:等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停。

将一副图像从rgb颜色空间转换到hsv颜色空间

hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)

利用cv2.inRange函数设阈值,去除背景部分

mask = cv2.inRange(hsv, lower_red, upper_red)

第一个参数:hsv指的是原图
第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0
第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0
而在lower_red~upper_red之间的值变成255

中值滤波medianBlur
中值滤波对消除椒盐噪声非常有效,能够克服线性滤波器带来的图像细节模糊等弊端,能够有效保护图像边缘信息,是非常经典的平滑噪声处理方法。

medianBlur(InputArray src, OutputArray dst, int ksize)

参数解释:
. InputArray src: 输入图像,图像为1、3、4通道的图像,当模板尺寸为3或5时,图像深度只能为CV_8U、CV_16U、CV_32F中的一个,如而对于较大孔径尺寸的图片,图像深度只能是CV_8U。
. OutputArray dst: 输出图像,尺寸和类型与输入图像一致,可以使用Mat::Clone以原图像为模板来初始化输出图像dst
. int ksize: 滤波模板的尺寸大小,必须是大于1的奇数,如3、5、7……

cv2.findContours()函数 //查找轮廓

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

第一个参数是寻找轮廓的图像;
第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
cv2.RETR_EXTERNAL 表示只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系
cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE 建立一个等级树结构的轮廓。

第三个参数method为轮廓的近似办法
cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法

返回值
cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性

cv2.boundingRect(cnt)

生成一个最小的矩形,把找到的轮廓包起来。
这个函数很简单,cnt是一个轮廓点集合,也就是它的参数,可以通过cv2.findContours获取;返回四个值,分别是x,y,w,h;
x,y是矩阵左上点的坐标,w,h是矩阵的宽和高

cv2.rectangle
这个函数的作用是在图像上绘制一个简单的矩形。
参数解释

第一个参数:img是原图

第二个参数:(x,y)是矩阵的左上点坐标

第三个参数:(x+w,y+h)是矩阵的右下点坐标

第四个参数:(0,255,0)是画线对应的rgb颜色

第五个参数:2是所画的线的宽度

cv2.VideoCapture读取视频或摄像头,并进行保存帧图像或视频 一、语法:cap = cv2.VideoCapture(0) 说明:参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:cap=cv2.VideoCapture('video.mp4') 二、语法:cap.isOpened() 说明:判断视频对象是否成功读取,成功读取视频对象返回True。 三、语法:ret,frame = cap.read()............ 阅读详情

相关推荐

[opencv4]——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 检测 ## 2D目标检测(2D Object Detection) [21] OW-DETR: Open-world Detection Transformer(开放世界检测transformer) [paper](https://arxiv.org/abs/2112.01513) | [code](htt.

wwtx的博客 7648

cv2常用操作整理

1、图像基本操作 1.1、像素操作 img.item(i,j,k) //获取通道像素值 等价于img[i,j,k] img.itemset((i,j,k),val) //设置像素的值 等价于img[i,j,k] = val 1.2、拆分及合并图像通道 b,g,r=cv2.split(img) //拆分 b=img[:,:,0] //分开取B通道 img[:,:,0]=0 //B通道置为0 img=cv2.merge(b

alex1801 2956

Python-OpenCV及cv2,numpy库最新安装教程[最全步骤]

安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结 前言 首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信)) OpenCV-Python...

qq_45425286的博客 7432

python opencv描点画线_Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法

Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略目录关于OpenCV简介OpenCV应用领域1、计算机视觉领域方向2、计算机操作底层技术安装OpenCV的的两种方法T1、使用whl文件法T2、直接命令法 T3、Anaconda 环境下安装OpenCV常见函数、方法0、基本库函数1、图像基本运算2、Image.open 和cv...

weixin_42106357的博客 2171

opencv图像旋转和翻转,cv2.flip,cv2.rotate

目录 翻转图像 图像旋转 翻转图像 opencv中使用cv2.filp可以实现图像翻转 def flip(src, flipCode, dst=None) src:输入图像 flipCode:flipCode 一个标志来指定如何翻转数组;0表示上下翻转,正数表示左右翻转,负数表示上下左右都翻转。 dst:输出图像 下面代码对图像进行不同旋转。 import cv2 import numpy as np lp = cv2.resize(cv2.imrea...

秃头披风侠的博客 2万+

Opencv cv2 Python 安装教程

用python搞各种各样的库——opencv cv2

Enze2012_1209的博客 2319

Python中cv2 (OpenCV, opencv-python)库的安装、使用方法demo最新详细教程

本文全面介绍了Python中OpenCV库(cv2)的安装和基础使用方法。文章详细讲解了如何通过Python进行图像处理的各种技术,包括图像读取、处理和显示等功能。适用于所有水平的开发者,从初学者到高级用户。Python OpenCV安装cv2图像处理opencv-python教程图像识别计算机视觉入门,确保读者能通过百度等搜索引擎快速找到本文。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 12万+

OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍

模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化、边缘检测等操作来生成二值化图像。

Java Punk 7481

OpenCV的cv2.minAreaRect解析

在这个文章中,我们将学习如何在感兴趣区域周围画最小面积矩形框。

weixin_43229348的博客 1万+

已经安装好了opencv,cv2仍然一直报红

目录 一、报错展示 二、解决【误打误撞】 一、情况展示 C:\Users\jiao> pip install opencv_python Collecting opencv_python Downloading https://files.pythonhosted.org/packages/33/c9/484c03aa576f2e0ad4d1e8b98128b376c13698e729cb875003730dd648f7/opencv_python-4.4.0.46-c...

焦哥的博客 3357

【OpenCV3】cv::Mat类成员函数详解

cv::Mat为OpenCV2和OpenCV3中最重要的类,不夸张得说,掌握了cv::Mat的操作,就掌握了OpenCV大半,这里主要介绍cv::Mat类的成员函数及其使用。

guduruyu的专栏 1万+

Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

学习记录如何使用opencv实现对图像的旋转操作。 1cv2.getRotationMatrix2D(center, angle, scale) 图像的旋转矩阵一般为: 但是单纯的这个矩阵是在原点处进行变换的,为了能够在任意位置进行旋转变换,opencv采用了另一种方式: 为了构造这个矩阵,opencv提供了一个函数: M = cv2.getRotationMatrix2D(center, angle, scale) 此函数主要用于获得图像绕着某一点的旋转矩阵,这个函数需要三个参数.

weixin_40522801的博客 2万+

【OpenCV】第二章: 图像处理基本操作:图像表示、像素处理、ROI、通道、属性

第二章: 图像处理基本操作 一、图像的表示方法 二值图像:每个像素点不是白色就是黑色;一个像素点只要一个bit位就能表示;用0或1表示每个像素点。 灰度图像:图像只有一种颜色,比如图像可以是红色,可以是灰色,可以蓝色,可以是绿色等等,但不管什么颜色都是只有一种颜色。但是这一种颜色我们给它分成了256个等级,就是256个灰度级,可以理解成256个不同程度的明暗度。比如一张红色的灰度图像,像素值=0就是最暗,黑色,像素值=255就是最亮,就是最亮的红色。255中明暗度正好可以用8位也就是1字节byte..

因为热爱所以坚持 3144

opencv cv2.rectangle 参数含义

cv2.rectangle 这个函数的作用是在图像上绘制一个简单的矩形。 opencv 官网上给出的 cv2.rectangle 函数定义 如下: Python: cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None img – Image. pt1 – Vertex of the rectang...

Gaowang_1的博客 1万+

RAID 0/1/5/10 性能实测:4块 SATA SSD 组阵列,顺序读写速度对比

本文通过实测对比了RAID 0/1/5/10在4块SATA SSD上的顺序读写性能,详细展示了不同RAID级别的配置方法、理论性能与实际测试数据。测试结果显示,RAID 0在顺序读写速度上表现最佳,而RAID 10则在性能与数据安全之间取得了平衡,适合数据库服务器等关键应用场景。

weixin_33462167的博客 426

从3dB定向耦合器到双圆极化天线:在HFSS里玩转相位差90°的馈电艺术

本文详细介绍了在HFSS中设计3dB定向耦合器与双圆极化天线的关键技术,重点解析了90°相位差生成原理及馈电网络设计。通过HFSS仿真工具,实现从定向耦合器到完整天线系统的集成,优化阵列天线性能,适用于卫星通信和雷达系统。

weixin_33717117的博客 556

Python之cv2:cv2(OpenCV,opencv-python)库pip下载超时、下载失败、无法下载的解决方案大全

Python之cv2:cv2(OpenCV,opencv-python)库pip下载超时、下载失败、无法下载的解决方案大全 在学习和使用 OpenCV(Python 包名:opencv-python 或简称 cv2)的过程中,很多初学者常常会遇到通过 pip install opencv-python 下载超时、下载失败或无法下载的问题。本文将从环境检查、网络配置、国内镜像源、手动下载与离线安装、以及替代方案等多个角度,为你提供一份超详细的解决方案大全,帮助你快速、稳妥地安装好 cv2 库。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 1万+

5个IO口驱动188数码管:查理复用算法在TM52F1363上的极致应用

本文深入解析了如何利用查理复用算法,在TM52F1363单片机上仅用5个IO口驱动188数码管。通过精密的硬件连接与软件时序控制,结合高阻态和动态扫描策略,实现了在极致资源限制下的稳定显示,为成本敏感型嵌入式产品提供了高效的IO复用解决方案。

numpy6sculptor的博客 478

Pycharm导入 Opencv的CV2 包过程(喷血记录)

Pycharm导入 Opencv的CV2 包过程(喷血记录) -<配置python 环境以及安装numpy和matplotlibd的过程,不知道的朋友可以随便搜,正常操作就行了, 1. 我遇到的问题: ***第一个问题***是无法直接通过pycharm安装python-opencv,通过清华的开源opencv镜像文件可以快速的下载,又方便的安装到pycharm中. ***第二个问题***是安装了opencv-python,但是无法导入,在优快云看到无数条方案,找到一条解决方法,再此文综合.>

uuuuty的博客 2万+

InSAR数据获取实战指南:Sentinel-1、精密轨道与ALOS PALSAR DEM的下载与应用

本文详细介绍了InSAR数据获取的实战指南,重点解析Sentinel-1数据、精密轨道数据(OPOD)和ALOS PALSAR DEM的下载与应用技巧。通过实际案例和代码示例,帮助读者掌握数据筛选、下载加速、校验及多源数据协同使用的关键方法,提升地面形变监测的精度与效率。

weixin_29215815的博客 433

(project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]

解决办法 第一步,检查自己是不是真的配置的不对,JAVA安装没,pack路径设置的对不对,这里有一位前辈的博文写的非常好,附加链接https://blog.csdn.net/ybhuangfugui/article/details/52225736#commentBox 第二步,如果按照前辈的博文设置的都一模一样,还是不对,想我下图这样。 那你来对地方了 方法很简单,你把你生成工程文件的路径彻底的...

展桑博客-BenjieBlog 2925

opencv绘图基础(2):cv2.line,cv2.rectangle,cv2.circle,cv2.ellipse,cv2.polylines,cv2.putText

目录 1.绘制线段:cv2.line(img,pt1,pt2,color,thickness=None,lineType=None,shift=None) 2.绘制矩形:cv2.rectangle(img,pt1,pt2,color,thickness=None,lineType=None,shift=None) 3.圆绘制:cv2.circle(img,center,radius,color,thickness=None,lineType=None) 4.椭圆绘制:cv2.ellipse(i.

zzccxx5的博客 4317

CKA-CN考试之路----16

所以结合本题,如果有多个文件中都存在同一个值,务必统一,或者修改最后一个次序的文件。中以不同的文件名来区分不同目的的配置会更有利于阅读.就像本题中的。但当有多个文件中存在同一个参数的不同值,最后会生效哪个值?中,但随着配置越来越多不怎么容易阅读.当多个文件同时存在一个参数,但值又不同。有时候我们会将所有内存参数全部写在。确认服务状态(2个红框中的内容)

Q先生 302

OpenCV 4基础篇| OpenCV图像基本操作

【代码】OpenCV 4基础篇| OpenCV图像基本操作。

游戏开发小Y的博客 2万+

生存曲线绘制及图例标签添加(使用R语言)

数据应该包含两列:一个是表示个体生存时间的时间变量(通常称为"时间(time)“)和一个是表示个体是否发生事件(如死亡)的事件变量(通常称为"事件(event)”)。通过修改上述代码中的数据和参数,您可以根据自己的需求绘制生存曲线,并添加相应的图例信息和标签。生存曲线是在生存分析中常用的工具,用于描述一组个体随时间的存活概率。函数的第一个参数指定图例的位置,这里我们选择了右上角(“topright”)。包来进行生存曲线的绘制,并通过添加图例信息和标签来增强可视化效果。的数据框,包含这两列数据。

CyberXZ的博客 557

第十二段:基于env的重用

现代芯片的验证通常分为两个层次, 一是模块级别( block level, 也称为IP级别、 unit级别) 验证, 二是芯片级别( 也称为SOC级别) 验证。 一个大的芯片在开发时, 是分成多个小的模块来开发的。 每个模块开发一套独立的验证环境, 通常每个模块有 一个专门的验证人员负责。 当在模块级别验证完成后, 需要做整个系统的验证。 假设某个系统分成了三个模块,如下图: 这三个模块在模块级别验证时, 分别有自己的driver和s...

年糕的博客 423
上一篇: c语言中 long _findfirst int _findnext int _findclose
下一篇: error: command ‘gcc‘ failed with exit status 1
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值