opencv#基础1

画图 opencv

import numpy as np
import cv2
import matplotlib.pyplot as plt
# 显示图片的函数
def show(image):
    plt.imshow(image)
    plt.axis('off')
    plt.show()
1. 画线
g = (0,255,0)
cv2.line(image,(0,0),(300,300),g,5)
# (0,0)开始的点,(300,300)结束位置,g-颜色 5 是线的粗细
show(image)
2.画矩形
cv2.rectangle(image,(10,10),(60,60),(255,0,0),2)
# (10,10) 左上角的点,(60,60)右下角的点
show(image)
cv2.rectangle(image,(10,10),(60,60),(255,0,0),-1)
show(image)
# 这样的话,矩形全部填充了
3.画圆

法1.

image = np.zeros((300,300,3),dtype='uint8')
(cX,cY) = image.shape[1]//2,image.shape[0]//2  # shape[0]高,并且确定圆心
white = (255,255,255)
for r in range(0,151,15):
    cv2.circle(image,(cX,cY),r,white,2)
# image在画图的地方,(cX cY)-圆心未知,r--半径,2--粗细
show(image)

法2.

image = np.zeros((300,300,3),dtype='uint8')
for i in range(10):
    # 半径取值
    r = np.random.randint(5,200)
    # 颜色取值
    color = np.random.randint(0,255,size=(3)).tolist()# 需要传列表
    # 取圆心
    pt = np.random.randint(0,300,size=(2))
    # 画图
    cv2.circle(image,tuple(pt),r,color, -1)

show(image)

一些包

def show(image):
    plt.imshow(image)
    plt.axis('off')
    plt.show()
def imread(image):
    image = cv2.imread(image) # cv2.imread(路径,标志)方法从指定的文件加载图像
    image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) # cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
    return image
图像翻转
# 水平翻转
image = imread('./test.jpg')
image = cv2.flip(image,1) # 1 水平,0垂直,-1# 水平+垂直翻转
show(image)
图像裁剪
# 图片裁剪,把他看成矩阵然后输入矩阵位置
image = imread('./test.jpg')
image = image[0:200,0:200]
show(image)

图像算术

# 图像加法,不会超出255
print(cv2.add(np.uint8([200]),np.uint8([200])))# uint8-->8位无符号整数 (0~255)
# 普通加法
print(np.uint8([200])+np.uint8([100])) # 到255后 255+1 = 0 剩下的继续加
[[255]]
[44]
# 图像减法
print(cv2.subtract(np.uint8([50]),np.uint8([100])))
# 普通减法
print(np.uint8([50])-np.uint8([100])) 
[[0]]
[206]
image = imread('./test.jpg')
#
M = np.ones(image.shape,dtype='uint8')*100
# 所有像素加100,image.shape(400,300,3)-->长,宽,3输入口
image = cv2.add(image, M)
show(image)

安位运算

# 生产一个正方形
rectangle = np.zeros((300,300,3), dtype='uint8')
white = (255,255,255)
cv2.rectangle(rectangle,(25,25),(275,275),white,-1)
show(rectangle)
# 生产一个圆
circle = np.zeros((300,300,3),dtype='uint8')
cv2.circle(circle,(150,150),150,white,-1)
show(circle)
and 与操作
# and, 与操作,有黑色就变黑 与操作,有0的就变0 
image1 = cv2.bitwise_and(rectangle,circle)
show(image1)
or 或操作
# or 或操作,有白就变白 有1 变1
image1 = cv2.bitwise_or(rectangle,circle)
show(image1)
XOR,异或操作
# XOR,异或操作,黑变白,嘿嘿和白白变黑
image1 = cv2.bitwise_xor(rectangle,circle)
show(image1)
not,取反
# not,非操作,颜色取反
image = cv2.bitwise_not(circle)
show(image)

图像金字塔

意义:同一图像,不同分辨率的子图集合,最大的图片放最下面

高斯金字塔

cv2.pyrDown()
cv2.pyrup()

拉普拉斯金字塔

cv2.pyrDown()
cv2.pyrup()

# 首先导入图片
image = imread('image.jpg')
show(image)
image.shape
------------------------------
<--这是图片片->
(424, 600, 3)
# cv2.pyrDown() 降低分辨率
for i in range(4):
    image = cv2.pyrDown(image)
    print(image.shape)
    show(image)
---------------------
每次降低降低一半
(212, 300, 3)
(106, 150, 3)
(53, 75, 3)
(27, 38, 3)
# cv2.pryUp()提高分辨率
for i in range(4):
    image = cv2.pyrUp(image)
    print(image.shape)
    show(image)

拉普拉斯算法

总结:下降1次为A,升一次为B
A-B

# 拉普拉斯金字塔
image = imread('./image.jpg')
down1 = cv2.pyrDown(image)
down2 = cv2.pyrDown(down1)
up_image = cv2.pyrUp(down2)
laplacian = down1 - up_image
# show(laplacian)
# show(up_image)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值