我在Vscode学OpenCV 初步接触

这篇具有很好参考价值的文章主要介绍了我在Vscode学OpenCV 初步接触。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV是一个开源的计算机视觉库,可以处理图像和视频数据。它包含了超过2500个优化过的算法,用于对图像和视频进行处理,包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言,包括C++、Python、Java等,可以在Windows、Linux、Mac OS X、Android等多个平台上使用。

图像

图像和视频数是指数字图像和数字视频中包含的像素或帧数。在数字图像中,图像数指的是图像中包含的像素数量,通常用宽度和高度的乘积来表示。在数字视频中,视频数指的是视频中包含的帧数,即视频中连续的静止图像序列数量。图像和视频数是指数字图像和数字视频中包含的像素或帧数。在数字图像中,图像数指的是图像中包含的像素数量,通常用宽度和高度的乘积来表示。在数字视频中,视频数指的是视频中包含的帧数,即视频中连续的静止图像序列数量。


pip install opencv-contrib-python 直接安装编译好的 OpenCV 贡献库

如果遇到了cv2无法有智能提示的功能

就把你下载cv2的路径下安装包cv2的pyd复制到你现在使用的Python解释器路径的文件下面

一、图像基本操作

导入所需要的库(使用 pip install 完整路径文件名完成安装)

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

1.0 读取像素

1.0.1 cv2中的方式

1) cv2返回值=图像(位置参数)
# 灰度
p=img[88,142]
print(p)

# 彩色的
b=img[12,13,14]
print(b)
xb=img[12.32]
print(xb)
2) cv2修改像素
img[1,2]=[213,12,12]

#通道的
img[1,2,1]=255

#跨行数的修改
img[100:150,100:150]=[255.0,255]

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.0.2 np中的方式进行像素处理

第一种方式 x=imgx[1,2] 返回的是一个包含像素值的数组,其中包括了图像的所有通道。而第二种方式 y=imgx.item(1,2) 返回的是指定位置的像素值,对于彩色图像,这个值是该位置的第一个通道的像素值。如果你想获取其他通道的像素值,你需要使用索引来访问。

1)np方式读取像素 :返回值=图像.item(位置参数)
y=imgx.item(1,2,1)
print(y)
print(type(y))

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

2)修改 itemset((1,2,0),12)
imgx.itemset((1,2,0),12)
print(imgx.item(1,2,0))
print(y)

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

3)数据类型
img.dtype 

1.1 读取图像

 img = cv2.imread(filename, flags=None)
  • img是返回值,其值是读取到的图像。如果未读取到图像,则返回“None”。
  • filename 表示要读取的图像的完整文件名。
  • flags 是读取标记。该标记用来控制读取文件的类型

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.1.1 演示:

使用的照片:
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

# 图像IO操作
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 1.读取图像

img = cv.imread("Pic/f2e919585490afd1bebd313257e7ad9.jpg")

# 2、显示图像
## 2.1 OpenCV中的方法
cv.imshow("THIS Pi", img)
cv.waitKey(0)
# 按照窗口显示的
cv.destroyAllWindows()

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.1.2 支持

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.1.3 flag

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
cv2.IMREAD_UNCHANGED和cv2.IMREAD_GRAYSCALE是OpenCV库中用于读取图像的两种不同的模式。

  • cv2.IMREAD_UNCHANGED:这个模式会读取图像的原始数据,包括alpha通道(如果存在的话)。也就是说,如果图像是彩色的,那么它会保持彩色,如果图像有alpha通道,那么alpha通道也会被保留。

  • cv2.IMREAD_GRAYSCALE:这个模式会将图像转换为灰度图像。也就是说,无论原始图像是彩色的还是带有alpha通道的,读取后的图像都会是灰度的。加粗样式

- IMREAD_UNCHANGED = -1:返回原始图像,包括alpha通道(如果存在)在内的所有信息,即原始图像。

- IMREAD_GRAYSCALE = 0:将图像转换为灰度图像。

- IMREAD_COLOR = 1:返回BGR顺序的彩色图像,忽略alpha通道。

- IMREAD_ANYDEPTH = 2:如果图像具有深度信息,保留这些信息(,则返回16/32位图像),否则将图像转换为8位。

- IMREAD_ANYCOLOR = 4:尝试以最可能的颜色格式读取图像。

- IMREAD_LOAD_GDAL = 8:使用GDAL驱动来读取图像。

- IMREAD_REDUCED_GRAYSCALE_2 = 16, IMREAD_REDUCED_GRAYSCALE_4 = 32, IMREAD_REDUCED_GRAYSCALE_8 = 64:将图像转换为单通道灰度图像,并减少图像的大小(分别减少1/21/41/8)。

- IMREAD_REDUCED_COLOR_2 = 17, IMREAD_REDUCED_COLOR_4 = 33, IMREAD_REDUCED_COLOR_8 = 65:转换图像为3通道BGR彩色图像,并减少图像的大小(分别减少1/21/41/8)。

- IMREAD_IGNORE_ORIENTATION = 128:忽略EXIF元数据中的定位信息,不旋转图像。

这些标志可以根据你的需求进行组合使用,例如,你可以同时使用IMREAD_GRAYSCALE和IMREAD_REDUCED_GRAYSCALE_2,这样OpenCV会读取灰度图像,并将其大小减少一半。
部分解释:
1.*.1_ 什么是alpha通道

Alpha通道是图像中的一个通道,它表示图像的透明度信息。在一个RGBA颜色模型中,R代表红色,G代表绿色,B代表蓝色,A代表Alpha,即透明度。
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

Alpha通道的值通常在0到255之间,其中0表示完全透明,255表示完全不透明。通过改变Alpha通道的值,我们可以改变图像的透明度。例如,如果我们将一个像素的Alpha值设置为127,那么这个像素将会是半透明的。

Alpha通道在图像处理中有很多应用,例如在合成两个图像时,我们可以通过调整Alpha通道的值来控制每个图像的可见度。

常见的色彩深度有:

  • 1位:二值图像,只有黑和白两种颜色。
  • 8位:灰度图像,可以表示256种不同的灰度级别。
  • 24位:真彩色图像,每个颜色通道(红、绿、蓝)使用8位,可以表示约1670万种颜色。
  • 32位:包含alpha通道的真彩色图像,每个颜色通道(红、绿、蓝和alpha)使用8位。

所以,如果你问的是像素可以表示的颜色数量,那么:

  • 1位色彩深度可以表示2种颜色。
  • 8位色彩深度可以表示256种颜色。
  • 24位色彩深度可以表示约1670万种颜色。
  • 32位色彩深度理论上可以表示约429亿种颜色,但实际上由于alpha通道表示的是透明度而非颜色,所以可表示的颜色数量仍然是约1670万种。

彩色深度标准通常有以下几种:

  • 8位色,每个像素所能显示的彩色数为2的8次方,即256种颜色。
  • 16位增强色,16位彩色,每个像素所能显示的彩色数为2的16次方,即65536种颜色。
  • 24位真彩色,每个像素所能显示的彩色数为24位,即2的24次方,约1680万种颜色。
  • 32位真彩色,即在24位真彩色图像的基础上再增加一个表示图像透明度信息的Alpha通道。
1.*.2_ 灰度图后使用 print 语句打印读取的图像数据。

输出图像的部分像素值

256个灰度等级,255代表全白,0表示全黑。
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
灰度图的显示的print
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
原格式的print
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.2 显示图像

在读取图像前判断图像文件是否存在,并在显示图像前判断图像是否存在

1.2.1 imshow函数__在一个窗口内显示读取的图像。

img = cv2.imshow( winname, mat )

winname 是窗口名称、mat 是要显示的图像。

cv2.imshow("THIS Pi", img)
cv2.imshow("THIS Pi", img)

如果是两个同名的,只会显示一个窗口

cv2.namedWindow("lesson")
cv2.imshow("THIS Pi", img)
cv2.imshow("lesson", img)  引用一个并不存在的窗口,并在其中显示指定图像

可以用cv2.imshow()来创建一个新窗口并显示图像。如果指定的窗口名称已存在,则会在该窗口中显示图像。如果指定的窗口名称不存在,则会创建一个新的窗口并显示图像。实际上,cv2.imshow()函数会完成窗口的创建和图像的显示两个步骤。

1.2.2 namedWindow__创建指定名称的窗口

 img = cv2.namedWindow( winname )

1.2.3 waitKey函数

cv2.waitKey( [delay] )

retval表示函数cv2.waitKey()的返回值。如果没有按键被按下,则返回-1;如果有按键被按下,则返回该按键的ASCII码。

delay表示等待键盘触发的时间,单位是毫秒。当该值设置为负数或零时,表示无限等待,即函数会一直等待键盘的触发。该值默认为0。
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.2.3.1 要实现交互,可以使用cv2.waitKey函数来等待键盘输入
import cv2

# 读取图像
image = cv2.imread("image.jpg")

while True:
    # 在窗口中显示图像
    cv2.imshow("Image", image)

    # 等待键盘输入,等待时间为0毫秒
    key = cv2.waitKey(0)

    # 如果按下键盘上的 "q" 键,退出循环
    if key == ord("q"):
        break

# 关闭窗口
cv2.destroyAllWindows()

delay>0 等待delay毫秒
delay<0 等待键盘单击
delay=0 无限等待

窗口会显示读取的图像,然后等待键盘输入。如果按下的是 “q” 键,程序将退出循环并关闭窗口。如果按下其他键,则会继续等待键盘输入。这样就实现了交互式地显示图像。

1.2.4 destroyWindow函数

cv2.destroyWindow( winname #winname 是窗口的名称。

1.2.5 destroyAllWindows

 cv2.destroyAllWindows()#用来释放(销毁)所有窗口

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

1.3 保存图像 cv2.imwrite()

retval cv2.imwrite( filename, img[, params] )#文件地址,文件名

retval 是返回值。如果保存成功,则返回 True;如果保存不成功,则返回 False。

filename 是要保存的目标文件的完整路径名,包含文件扩展名。

img 是被保存的图像。

params 是保存类型参数,是可选的

import cv2

# 读取图像
image = cv2.imread("image.jpg")

# 保存图像
retval = cv2.imwrite("saved_image.jpg", image)

# 判断是否保存成功
if retval:
    print("图像保存成功")
else:
    print("图像保存失败")

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
保存灰度图
对比一下先:
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

plt.imshow(img,cmap=plt.cm.gray)
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
为了直观用Pycharm
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

二、绘制几何图形

import numpy as np
import cv2

# 创建一个黑色的图像
img = np.zeros((512, 512, 3), dtype=np.uint8)

# 画线
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

# 画矩形
cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

# 画圆
cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)

# 画椭圆
cv2.ellipse(img, (256, 256), (100, 50), 0, 0, 180, 255, -1)

# 画多边形
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 255, 255))

# 显示图像
cv2.imshow('Image with Shapes', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

2.1 画直线

def line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None):

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

2.2 画矩形

def rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None): 

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide

2.3 画圆

def circle(img, center, radius, color, thickness=None, lineType=None, shift=None): 

我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide
我在Vscode学OpenCV 初步接触,OpenCV,vscode,opencv,ide文章来源地址https://www.toymoban.com/news/detail-715618.html

2.4 画椭圆

def ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)

2.5 画多边形

到了这里,关于我在Vscode学OpenCV 初步接触的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我在Vscode学OpenCV 图像处理五(直方图处理)

    直方图是一种统计图,显示了图像中每个灰度级别(或颜色通道)的像素数量。通过分析图像的直方图,可以获得关于图像对比度、亮度和颜色分布等方面的重要信息。 了解图像的对比度、亮度和色彩分布等信息。你可以使用OpenCV中的函数来计算和绘制图像的直方图,从而进

    2024年01月21日
    浏览(77)
  • 我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

    几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine :使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。 cv2.warpPerspective :使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等操作。 cv2.getAffineTransform :计算仿射变换

    2024年02月05日
    浏览(66)
  • 我在Vscode学OpenCV 图像处理四(轮廓查找 cv2.findContours() cv2.drawContours())-- 待补充

    在OpenCV中,边缘检测和轮廓查找是两个不同的图像处理任务,它们有不同的目标和应用。 1.1.1 边缘检测: 定义: 边缘检测是指寻找图像中灰度级别变化明显的地方,即图像中物体之间的界限。这些变化通常表示图像中的边缘或轮廓。 方法: 常用的边缘检测算法包括Sobel、

    2024年02月03日
    浏览(60)
  • 我在Vscode学OpenCV 图像处理一(阈值处理、形态学操作【连通性,腐蚀和膨胀,开闭运算,礼帽和黑帽,内核】)

    例如,设定阈值为127,然后:  将图像内所有像素值大于 127 的像素点的值设为 255。  将图像内所有像素值小于或等于 127 的像素点的值设为 0。 cv2.threshold() 和 cv2.adaptiveThreshold() 是 OpenCV 中用于实现阈值处理的两个函数,它们之间有以下区别: 1.1.1. cv2.threshold(): 这个函数

    2024年02月05日
    浏览(60)
  • 我在Vscode学OpenCV 图像处理三(图像梯度--边缘检测【图像梯度、Sobel 算子、 Scharr 算子、 Laplacian 算子、Canny 边缘检测】)

    这里需要区分开边缘检测和轮廓检测 边缘检测并非万能,边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。 OpenCV 提供了查找图像轮廓的函数 cv2.findContours(),该函数能够查找图

    2024年02月04日
    浏览(61)
  • vscode搭建OpenCV环境(默认已经有了vscode)

    @[TOC](这里写目录标题) # 一.文件下载: ## 1.MinGW下载 ## 2.Cmake下载 ## 3.Opencv下载 # 二.配置环境变量: # 三.vscode 配置 ## 1、launch.json ## 2、c_ cpp_ properties json ## 3、tasks json # 四.测试 1.MinGW下载(MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net) 单独在一个盘里面新建一个文

    2024年02月06日
    浏览(44)
  • 在VSCode中使用Opencv

    本文描述在VSCode工具下使用Opencv的详细步骤 由于Opencv在官网中的发行版并不适用于VSCode,所以使用VSCode不能使用Opencv官网中的发行版。因此就有两个选择: 在其它网站上下载Opencv编译好的文件(本文不讲); 在官网下载源码并本地编译。 本地编译 本地编译需要MinGW,这个东

    2024年02月15日
    浏览(33)
  • windows vscode使用opencv

    1.windows vscode使用opencv 参考:https://blog.csdn.net/zhaiax672/article/details/88971248 https://zhuanlan.zhihu.com/p/402378383 https://blog.csdn.net/weixin_39488566/article/details/121297536 安装opencv 原料: 手 地球人使用的IO设备 MinGW编译器(8.1.0的版本) 编译好的build:https://gitee.com/kirigaya/opencv_built_by_gcc_on_-wi

    2024年02月12日
    浏览(45)
  • vscode+opencv基础用法学习1

    案例1:读取图片信息 如果是使用云服务器的话,由于图形界面的问题,使用cv::show来显示图片会报错 注: #include \\\"opencv2/opencv.hpp\\\"的时候在vscode里面会显示没有这个头文件,导致运行不了。 解决方案: 方法1.鼠标放到红色波浪线位置,会有一个快速修复,点开之后将OpenCV的路

    2024年01月22日
    浏览(30)
  • 【VSCode+python+opencv安装配置】

    在Vscode官网计算机任务来下载客户端或服务器端,然后一路安装即可 在Python官网下载需要的版本,安装时选择将其路径加入系统变量,然后修改镜像源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple,还可以顺便安装yapf(检查代码)+flake8(用于语法美化), 下载对应的

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包