首页 > 其他分享 >opencv - 2 - 核心操作

opencv - 2 - 核心操作

时间:2024-09-05 15:14:03浏览次数:9  
标签:10 img 核心 imshow opencv import 操作 img1 cv

一、图像的基本操作

1、访问像素值并修改它们

当成一个三维数组访问即可

import cv2 as cv
import numpy as np

img = cv.imread("img/1.png")
oneElement = img[100,100]
print(oneElement)
# 会得到[51 35  2]
oneElementColor = img[100,100,0]
print(oneElementColor)
# 会得到51

2、访问图像属性

图像属性包括行数,列数和通道数,图像数据类型,像素数等

  • img.shape 得到行,列和通道数的元组(如果图像是彩色的)
  • img.shape 得到行,列(如果图像是灰度的)
  • img.size 得到要素数量
  • img.dtype 得到图像数据类型,一般为uint8

3、设置感兴趣区域(ROI)

本质上就是数组切割

import cv2 as cv
import numpy as np

img = cv.imread("img/1.png")
ball = img[280:340, 330:390]
cv.imshow("ball",ball)
cv.waitKey(0)
cv.destroyAllWindows()

image

img[273:333, 100:160] = ball 

甚至还能把这个img又赋值回原来图像中的一部分

4、分割和合并图像

import cv2 as cv
import numpy as np

img = cv.imread("img/1.png")
b,g,r = cv.split(img)
# 可以将彩色通道拆分成为三个灰度通道,主要这三个灰度通道的shape都是二维数组
print(b.shape)
print(g.shape)
print(r.shape)
# b[:,:] = 0
img = cv.merge((b,g,r))
# 对通道进行修改之后又可以合成为彩色通道
cv.imshow("image",img)
cv.waitKey(0)
cv.destroyAllWindows()

5、图像边框

cv.copyMakeBorder()

replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)

二、改变颜色空间

即将图像从一个色彩空间转换到另一个色彩空间
只有两个最广泛使用的,BGR↔灰色和BGR↔HSV。
(HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。不同的软件使用不同的规模。因此,如果你要将OpenCV值和它们比较,你需要将这些范围标准化。)

img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
得到
image
img = cv.cvtColor(img, cv.COLOR_BGR2HSV)
得到
image
通过hsv可以更好的选中色彩方位

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)

while True:
    _,frame = cap.read()
    hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    mask = cv.inRange(hsv, lower_blue, upper_blue)
    # 得到一个只在有效范围内不是0的区域
    res = cv.bitwise_and(frame,frame, mask=mask)
    # 只显示在mask范围内的frame
    # cv.imshow('hsv', hsv)
    cv.imshow('res', res)
    # cv.imshow('mask', mask)
    # cv.imshow('frame',frame)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()
  • 1、先转换为hsv
hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
mask = cv.inRange(hsv, lower_blue, upper_blue)
  • 2、再根据hsv的色彩范围选中区域,形成roi
mask = cv.inRange(hsv, lower_blue, upper_blue)
  • 3、再用and将原图与原图合成,并只显示roi内的内容
res = cv.bitwise_and(frame,frame, mask=mask)

三、图像变换

1、放大缩小

import cv2 as cv
import numpy as np
import math

img1 = cv.imread("img/1.png")
cv.imshow("img1",img1)
height,width = img1.shape[:2]
# 方法1
# 注意传入的dsize参数必需是整数,所以需要一个取整函数
img2 = cv.resize(img1,(math.ceil(0.25*width), math.ceil(0.25*height)), interpolation = cv.INTER_CUBIC)
cv.imshow("img2",img2)
# 方法2
img3 = cv.resize(img1,None,fx=0.5, fy=0.5, interpolation = cv.INTER_CUBIC)
cv.imshow("img3",img3)
cv.waitKey(0)
cv.destroyAllWindows()

2、平移

width =列数,height =行数
利于图像与该矩阵相乘即可得到移动后的矩阵
image
tx为x轴上移动的距离
ty为y轴上移动的距离

import numpy as np
import cv2 as cv
img = cv.imread('img/1.png',0)
rows,cols = img.shape
M = np.float32([[1,0,100],[0,1,50]])
dst = cv.warpAffine(img,M,(cols,rows))
# 最后一个参数为图像的大小
cv.imshow('img',dst)
cv.waitKey(0)
cv.destroyAllWindows()

四、形态学变换

import cv2 as cv
import numpy as np
img = cv.imread('img/1.png')
kernel = np.ones((5,5),np.uint8)
img1 = cv.erode(img,kernel,iterations = 1)  # 侵蚀,黑色部分将扩大,会把一些白色噪点去除
img2 = cv.dilate(img,kernel,iterations = 1) # 扩张,扩大白色部分,会放大噪点,但是会连接白色的损坏部分
img3 = cv.morphologyEx(img,cv.MORPH_OPEN,kernel) # 开运算,先侵蚀以去除噪点,再扩张,放大白色特征,还能在纤细处分离物体
img4 = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel) # 闭运算,先扩张再侵蚀,填充物体内细小空间,连接邻近物体和平滑边界
img5 = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel) # 形态学梯度,用扩张减去侵蚀,即可得到边界范围
img6 = cv.tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)  #顶帽 ,输入图像和图像开运算之差,用于显示阴影区域
img7 = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel) # 黑帽,输入图像和图像闭运算之差,用于显示阴影区域

cv.imshow("img",img)
cv.imshow("img1",img1)
cv.imshow("img2",img2)
cv.imshow("img3",img3)
cv.imshow("img4",img4)
cv.imshow("img5",img5)
cv.imshow("img6",img6)
cv.imshow("img7",img7)
cv.waitKey(0)
cv.destroyAllWindows()

img:
image

img1:
image

img2:
image

img4:
image

img5:
image

img6:
image
img7:

标签:10,img,核心,imshow,opencv,import,操作,img1,cv
From: https://www.cnblogs.com/CoderWangEx/p/18396572

相关文章

  • 麒麟操作系统运维工程师(KYCA 运维)有用吗
    麒麟操作系统运维工程师(KYCA运维)的作用和价值是显著的,对于个人职业发展以及企业和组织的信息系统运维都具有重要意义。以下是对其有用性的详细分析:一、个人职业发展专业认证与技能提升:KYCA证书是对运维工程师在麒麟操作系统上专业技能的一种认证,证明持证者具备使用和维护麒......
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
    ......
  • opencv实战项目二十:检测箱盖的旋转角度以及位置
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、算法流程:二、算法实现:2.1二值化箱盖并获取最大轮廓:2.2凸包与多边形近似提取矩形2.3最小外接矩形获取角度与位置三,整体代码实现:四,实现效果:前言在当今的工业自动化领域,精密制造和......
  • MySQL(三)操作符 连接操作
    LIKE操作符用于在WHERE子句中搜索列中的指定模式,是进行模糊查询的关键字通常与%和_通配符一起使用SELECTcolumn1,column2,...FROMtable_nameWHEREcolumn_nameLIKEpattern;通配符%:匹配任意字符(包括零个字符)_:匹配单个字符_的用法:使用_通配符找出所有......
  • winddows系统使用磁盘管理工具进行分区操作
    1、https://www.disktool.cn/jiaocheng/removable-hdd.html使用磁盘管理工具进行分区操作磁盘管理是Windows系统内置的磁盘管理工具,它可以用来解决移动硬盘怎么分区的问题。这个系统自带的工具为我们提供了一系列基础的磁盘分区管理功能,比如扩展卷、压缩卷、删除卷、新建简单卷......
  • Hive DML(数据操作语言)操作指南
    目录DML(DataManipulationLanguage)数据操作 Load1)语法2)实操案例 Insert 将查询结果插入表中1)语法2)案例 将给定Values插入表中1)语法2)案例 将查询结果写入目标路径1)语法2)案例 Export&Import1)语法2)案例DML(DataManipulationLanguage)数据操作 Load......
  • OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述connectedComponents函数计算布尔图像的连通组件标签图像。该函数接受一个具有4或8连通性的二值图像,并返回N,即标签总数(标签范围为[0,N-1],其中0代表背景标签)。ltype参数指......
  • OPenCV结构分析与形状描述符(3)计算一个点集的最小外接矩形的函数boundingRect()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述计算一个点集的最小右上边界矩形或灰度图像中的非零像素。该函数计算并返回指定点集或灰度图像中非零像素的最小右上边界矩形。在OpenCV中,boundingRect函数用于找到一个点集的最......
  • SQLSERVER建立Oracle Provider for OLE DB操作文档
    1、 下载ODAC-21.7-Xcopy-64-bit,并解压到目录ODAC21.72、 D盘创建目录:Oracle21C3、 CMD转向到目录ODAC21.7,输入【install.batoledbc:\oracleodac】,安装服务4、 系统环境变量中,为Path添加“D:\ Oracle21C;D:\ Oracle21C \bin;”5、 重启计算机,一定要重启6、 SQLS......
  • 五分钟快速理解new操作符
    五分钟快速理解new操作符(1)new操作符做了哪些事情(4步)(2)代码示例(3)手写new标识符(1)new操作符做了哪些事情(4步)新建一个新的空对象{}让空对象的__proto__和构造函数的prototype建立链接{_proto:Person.prototype}改变this指向,让构造函数中的this指......