首页 > 其他分享 >cv_first step

cv_first step

时间:2024-09-26 17:50:27浏览次数:8  
标签:plt img image cv2 step 参数 图像 cv first

先前操作

导包

用清华镜像源在Annaconda promots中Base环境下用pip命令

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

下载cv包

cv.__version__查看版号

注意

1.在同一文件夹下面,可以直接调用不写路径

import cv2 as cv

img = cv.imread("test1.jpg")

cv.imshow("test1", img)

cv.waitKey(0)

cv.destroyAllWindows()

2.在不同的文件夹下,需要先写调用路径

import cv2

image_path = "C:/Users/lx/Desktop/test2.jpg" #图片路径

img = cv2.imread(image_path)

cv2.imshow('bao',img) #显示图片,[图片窗口名字,图片]

cv2.waitKey(0) # 无限期显示窗口

 

Opencv中的读写操作

1、cv2.imread()函数

使用函数 cv2.imread(filepath,flags) 读入图像。

第一个参数是这幅图像应该在此程序的工作路径,或者给函数提供完整路径

第二个参数是要告诉函数应该如何读取这幅图片:

cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数

cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha 通道

PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明

2、cv2.imshow()函数

使用函数 cv2.imshow(Windownanme,image) 显示图像。

第一个参数是窗口的名称,字符串

第二个是待显示的图像

Matplotlib

这是python的绘图库,可以用来显示图像

import cv2

from matplotlib import pyplot as plt

image_path = "C:/Users/lx/Desktop/test2.jpg" #图片路径

img = cv2.imread(image_path)

plt.imshow(img,cmap="gray",interpolation="bicubic")

plt.xticks([]),plt.yticks([])

plt.show()

imshow()其实就是将数组的值以图片的形式展示出来,数组的值对应着不同的颜色深浅,而数值的横纵坐标就是数组的索引,比如一个1000X1000的数组,图片里的点也就有1000X1000个,比如第一个行第一个点的坐标就是(0,0),它的值会通过colorbar(也就是cmap)反映出来,所以按照我的理解,imshow()函数的功能就是把数值展示成热图。

import numpy as np

import matplotlib.pyplot as plt

x=np.array([[10,20,30,40],

            [50,60,70,80]])

plt.imshow(x, cmap='RdBu')

cb = plt.colorbar(label='color bar settings')

plt.show()

图像显示数组的排列方式

PS.interpolation参数,此参数显示了不同图像之间的插值方式

官方示例下的插值效果

import matplotlib.pyplot as plt
import numpy as np
methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16',

      'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric',

      'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']
\# Fixing random state for reproducibility
np.random.seed(19680801)
grid = np.random.rand(4, 4)
fig, axs = plt.subplots(nrows=3, ncols=6, figsize=(9, 6),subplot_kw={'xticks': [], 'yticks': []})
for ax, interp_method in zip(axs.flat, methods):

  ax.imshow(grid, interpolation=interp_method, cmap='viridis')

  ax.set_title(str(interp_method))
plt.tight_layout()

plt.show()

OpenCV 中的绘图函数

颜色正常是BGR但是在spyper编译后是RGB显示。很奇怪?

是因为在plot上画出来的

1.画线 cv2.line()

cv2.line(img,(,),(,),(255,0,0),w)    

第一个参数 img:要划的线所在的图像;

第二个参数 point1:直线起点

第三个参数 point2:直线终点

第四个参数 color:直线的颜色[RGB]

第五个参数 thickness=1:线条粗细

2.画长方形cv2.rectangle()

cv2.rectangle(img,(384,150),(250,128),(255,0,0),3)

第一个参数 img:要划的线所在的图像;

第二个参数 point1:长方形左上方顶点

第三个参数 point2:长方形右下方顶点

第四个参数 color:直线的颜色[RGB]

第五个参数 thickness=1:线条粗细

3.画圆cv2.circle()

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

第一个参数 img:要划的线所在的图像;

第二个参数 point1:圆心

第三个参数 r:半径

第四个参数 color:圆的颜色[RGB]

第五个参数 w=-1时,把圆填满

​ w>0时,为边界线的长度

4.画椭圆cv2.ellipse()

cv2.ellipse(img, (256,256), (100,50), 0, 0, 360, (0,255,0), -1)

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)

​ img:需要绘图的图像

​ center:椭圆中心点坐标

​ axes:椭圆尺寸(即长短轴)

​ angle:旋转角度(顺时针方向)

​ startAngle:绘制的起始角度(顺时针方向)

​ endAngle:绘制的终止角度(例如,绘制整个椭圆是0,360,绘制下半椭圆就是0,180)

​ color:线条颜色(BGR)

​ thickness:线条粗细(默认值=1)

​ lineType:线条类型(默认值=8)

​ shift:圆心坐标点和数轴的精度(默认值=0)

滑动条做调色板

import cv2
def nothing(x):#预设的回调函数
    pass
img=(np.zeros((300,512,3),np.uint8))#创建一个图像,300x512大小,数据类型无符号8位
cv2.namedWindow("image")
cv2.createTrackbar("R","image",0,255,nothing)#三个色彩滑动条
cv2.createTrackbar("G","image",0,255,nothing)
cv2.createTrackbar("B","image",0,255,nothing)
switch="0:OFF\n1:ON"
cv2.createTrackbar(switch,"image",0,255,nothing)#类似于布尔开关的转换条
while(1):
    cv2.imshow("image",img)
    k=cv2.waitKey(1)&0xff
    if k==27:
        break
    r=cv2.getTrackbarPos("R","image")
    g=cv2.getTrackbarPos("G","image")
    b=cv2.getTrackbarPos("B","image")
    s=cv2.getTrackbarPos(switch,"image")
    if s==0:
        img[:]=0
    else:
        img[:]=[b,g,r]#显示颜色
cv2.destroyAllWindows()    

cv2.createTrackbar(trackbarName, windowName, value, count, onChange) 创建TrackBar控件,

trackbarName 滑动条的名字
windowName 滑动条被放置的窗口的名字
value为trackbar(滑动条)的默认值,
count为trackbar(滑动条)的最大值, 最小为0
onChange 回调函数,每次滑动都会调用回调函数,callback

cv2.getTrackbarPos(trackbarname, winname) 获取TrackBar当前值,即得到滑动条的数值

trackbarname 滑动条的名字
winname 滑动条被放置的窗口的名字
返回值是滑动条的数值

画板

import numpy as np
import cv2
def nothing(x):
    pass
drawing=False
mode=True
ix,iy=-1,-1
def draw_circle(event,x,y,flags,param):
    r=cv2.getTrackbarPos("R","image")
    g=cv2.getTrackbarPos("G","image")
    b=cv2.getTrackbarPos("B","image")
    color=(b,g,r)
    global ix,iy,drawing,mode
    if event ==cv2.EVENT_LBUTTONDOWN:
        drawing=True
        ix,iy=x,y
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
        if drawing==True:
            if mode==True:
                cv2.rectangle(img,(ix,iy),(x,y),color,-1)
            else:
                cv2.civcle(img,(x,y),3,color,-1)
    elif event==cv2.EVENT_LBUTTONUP:
        drawing==False

img=(np.zeros((300,512,3),np.uint8))        
                                            
#创建一个图像,512x512大小,数据类型无符号8位
cv2.namedWindow("image")
cv2.createTrackbar("R","image",0,255,nothing)
cv2.createTrackbar("G","image",0,255,nothing)
cv2.createTrackbar("B","image",0,255,nothing)
cv2.setMouseCallback("image",draw_circle)
while(1):
    cv2.imshow("image",img)
    k=cv2.waitKey(1)&0xff
    if k==ord("m"):
        mode=not mode
    elif k==27:
        break

标签:plt,img,image,cv2,step,参数,图像,cv,first
From: https://blog.csdn.net/m0_51634066/article/details/142564179

相关文章

  • 智能监控,守护绿色能源:EasyCVR在电站视频监控中心的一站式解决方案
    随着科技的飞速发展,视频监控技术在社会安全、企业管理及智慧城市建设等领域中扮演着越来越重要的角色。特别是在电力行业中,电站作为能源供应的关键设施,其安全性和稳定性至关重要。传统的人工监控方式已难以满足现代电站复杂多变的运行需求,因此,构建一个高效、稳定、智能的电站视频......
  • 探索EasyCVR视频融合平台:在视频编解码与转码领域的灵活性优势
    随着视频监控技术的飞速发展,各类应用场景对视频数据的处理需求日益复杂多样。从公共安全到智慧城市,再到工业监控,高效、灵活的视频处理能力成为衡量视频融合平台性能的重要标准。在众多解决方案中,EasyCVR视频融合平台凭借其在视频编解码、转码等能力上的强大灵活性,脱颖而出,成为行业......
  • EasyCVR智慧公园视频智能管理方案:赋能公园安全管理新高度
    随着城市化进程的加速,智慧城市建设已成为提升城市管理效率、增强居民生活质量的重要途径。智慧公园作为智慧城市的重要组成部分,其安全与管理水平直接影响着市民的休闲娱乐体验。EasyCVR智慧公园视频智能管理方案,正是基于这一背景应运而生,它集成了高清视频监控、智能分析、远程管理......
  • OpenCV(cv::mean())
    目录1.函数定义2.示例2.1计算灰度图像的平均值2.2计算彩色图像的每个通道的平均值2.3带掩码的平均值计算总结cv::mean()是OpenCV中用于计算图像的平均值的函数。它可以用于单通道图像、多通道图像(如彩色图像)、带掩码的图像等。1.函数定义Scalarcv::mean(InputArr......
  • 赋能未来工厂:EasyCVR视频平台助力装备制造业迈向智能制造
    一、方案背景随着信息技术的飞速发展,装备制造业作为国民经济的支柱产业,正面临着智能化转型的迫切需求。为了提升生产效率、保障设备安全、优化管理流程,装备制造业迫切需要引入先进的视频监控与人工智能技术。EasyCVR视频平台凭借其强大的视频汇聚、智能分析和管理能力,为装备制造......
  • ShiftAddAug:基于乘法算子训练的最新无乘法网络方案 | CVPR'24
    不包含乘法的运算符,如移位和加法,因其与硬件的兼容性而日益受到重视。然而,采用这些运算符的神经网络(NNs)通常表现出比具有相同结构的传统NNs更低的准确性。ShiftAddAug利用成本较高的乘法来增强高效但功能较弱的无乘法运算符,从而在没有任何推理开销的情况下提高性能。将一个ShiftAd......
  • EfficientViT(2023CVPR):具有级联组注意力的内存高效视觉Transformer!
    EfficientViT:MemoryEfficientVisionTransformerwithCascadedGroupAttentionEfficientViT:具有级联组注意力的内存高效视觉Transformer万文长字,请耐心观看~论文地址:https://arxiv.org/abs/2305.07027代码地址:Cream/EfficientViTatmain·microsoft/Cream......
  • 综合实验1 利用OpenCV统计物体数量
    一、实验简介传统的计数方法常依赖于人眼目视计数,不仅计数效率低,且容易计数错误。通常现实中的对象不会完美地分开,需要通过进一步的图像处理将对象分开并计数。本实验巩固对OpenCV的基础操作的使用,适当的增加OpenCV在图像处理方向的进阶操作,例如利用canny算子等算法进行图像分......
  • 解决 ModuleNotFoundError: No module named ‘cv2‘?
    前言解决ModuleNotFoundError:Nomodulenamed‘cv2’?ModuleNotFoundError:Nomodulenamed‘cv2’?1.安装opencv-python:pipinstallopencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple/2.出现错误ERROR:Couldnotbuildwheelsforopencv-python......
  • WINCCV7.5SP2使用VBA一次性添加多个IO域控件,并设置属性和其连接的变量
    这篇博客发表在某浪上,截至目前还没有通过审查,在这里也发一遍。前面的练习是先在页面手工放置IO域,然后使用VBA脚本批量设置连接的变量。这个练习进一步,使用VBA脚本创建IO域控件,并设置连接的变量。这个练习自动创建20个IO域,名字叫做IO1至IO20,并设置其连接的变量,为Real1至Real20;IO域......