【opencv学习】opencv读取、显示图像、边缘填充等操作的学习记录

前言:

opecncv库是常用的图像操作库,在深度学习中常常用到。包含了很多常见的图像处理方法,包括图像变化、图像平滑、形态学变化、边缘检测等一些常用的图像处理技术。浅浅学习一下!!!

1.读取图像、显示图像、保存图像操作

import cv2
from matplotlib import pyplot as plt
import numpy as np

## 1.读取图像、显示图像、保存图像操作
img = cv2.imread('data//0.jpg',cv2.IMREAD_COLOR)   # cv2.IMREAD_COLOR为彩色读取,cv2.IMREAD_GRAYSCALE为灰度模式读取
cv2.imshow('image',img)         # 显示图像,第一个参数为创建的窗口名
cv2.imwrite("0_t.jpg",img)      # 保存图像
cv2.waitKey(0)                  # 等待键盘输入,单位为毫秒
cv2.destroyAllWindows()         # 删除建立的窗口,参数可以为创建的窗口名称

2.视频操作

# 2.视频操作
cap = cv2.VideoCapture(0)       # 参数为0表示打开摄像头,也可以为其他视频数据路径

while(True):
    ret, frame = cap.open()
    gray = cv2.cvtColor(frame,cv2.IMREAD_COLOR)
    cv2.imshow('frame',gray)
    if cv2.waitKey(1000):  
    break
cap.release()
cv2.destroyAllWindows()

3.绘图函数

# 3.绘图函数

bg = np.zeros((520,520,3),np.uint8)

# 画线,参数为起点坐标到终点坐标,颜色、粗细
cv2.line(bg,(0,0),(260,260),(255,0,0),5)

# 画矩形,参数为左上坐标、右下坐标、颜色、粗细
cv2.rectangle(bg, (350,0), (500,128), (0,255,0),3)

# 画圆,参数为圆点坐标、半径,颜色
cv2.circle(bg,(260,260),62,(0,0,255))

# 画椭圆,参数为中点坐标、长短轴、顺时针旋转度数、起点度数到终点读书,颜色、是否为虚实心
cv2.ellipse(bg,(256,256),(100,50),45,180,360,255,1)

# 画多边形,
pts = np.array([[10,5],[200,30],[170,20],[150,10]],np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(bg,[pts],False,(0,255,255)) 

# 在图片上添加文字,参数为文字内容、绘制的位置、字体类型、大小、颜色、粗细、类型
font = cv2.FONT_HERSHEY_SIMPLEX  
cv2.putText(bg,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA) 
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image',500,500)
cv2.imshow('image',bg)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.处理鼠标函数


# 查看所有被支持的鼠标事件
events = [i for i in dir(cv2) if 'EVENT' in i]



def draw_circle(event,x,y,flags,param):             # 鼠标回调函数
    if event == cv2.EVENT_LBUTTONDBLCLK:            
        cv2.circle(img,(x,y),100,(255,0,0),-1)

# 创建图像与窗口并将窗口与回调函数绑定

img = np.zeros((520,520,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)

while(1):
    cv2.imshow('image',img)
    if cv2.waitKey(1) and 0xFF  == ord('q'):
        break

cv2.destroyAllWindows()

在这里插入图片描述

5.用滑动条做调色板

img = np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')
def nothing(x):
    pass

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,1,nothing)

while(1):
    cv2.imshow('image',img)
    k=cv2.waitKey(1)
    if k == ord('q'):
        break
    
    r = cv2.getTrackbarPos('B','image')
    g = cv2.getTrackbarPos('G','image')
    b = cv2.getTrackbarPos('R','image')
    s = cv2.getTrackbarPos(switch,'image')
    
    if s == 0:
        img[:] = 0
    else:
        img[:] = [r,g,b]
    
cv2.destroyAllWindows()

在这里插入图片描述

6.图像的基本操作


img = cv2.imread('data/0.JPG')
print(img.shape)        # 获取行列通道数
print(img.size)         # 返回图像的像素数目
print(img.dtype)        # 返回图像的数据类型

# port = img[20:30,20:30]
# img[30:40,40:50]=port
# cv2.imshow('image',img)
# r,g,b = cv2.split(img)  # 拆分
# img=cv2.merge(r,g,b)    # 合并

# blue = img[:,:,0]       # 拆离b通道
blue = [255,0,0]
replicate = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT101)
wrap = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=blue)

plt.subplot(231),plt.imshow(img,'gray'),plt.title('original')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('reflect101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('wrap')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')

plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值