opencv基本操作-2

像素点操作

import cv2 as cv

# cv2.IMREAD_COLOR:彩色图片,默认参数,1
# cv2.IMREAD_GRAYSCALE:灰度图,0
# cv2.IMREAD_UNCHANGED:包括alpha(透明通道),-1
img = cv.imread('./images/cat.jpg',cv.IMREAD_COLOR)
cv.imshow("img",img)
print(img.shape)

# 彩图索引该像素点
B,G,R = img[100,100]
print(f"B={B},G={G},R={R}")

#灰度图索引该像素点
Grey = img[100,100]
print(f"intensity={Grey}")

cv.waitKey(0)
cv.destroyAllWindows()

彩图默认参数

输出结果:

灰度图,通道数为1

输出结果:

转为灰度图

img = cv2.imread("cat.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("", img)
cv2.waitKey()

效果前后都相同

图像缩放

  • 下采样,丢像素

# 图像缩放:下采样,丢像素
import cv2

# 读取图像
img = cv2.imread("./images/img.png")

# 从原图像中取出每2个像素点中的一个
img2 = img[::2, ::2]

# 创建窗口
cv2.namedWindow('img2', cv2.WINDOW_NORMAL)
# 调整窗口大小
cv2.resizeWindow('img2', img.shape[1], img.shape[0])

# 在窗口中显示图像
cv2.imshow('img2', img2)
# 等待按键
cv2.waitKey(0)
img1 = cv2.imread("./images/cat.jpg", 0)
h = img1.shape[0]
w = img1.shape[1]
img2 = np.zeros([h * 2, w * 2], dtype='uint8')
for i in range(0, h * 2, 2):
    for j in range(0, w * 2, 2):
        img2[i, j] = img1[i // 2, j // 2]
        img2[i + 1, j] = img1[i // 2, j // 2]
        img2[i, j + 1] = img1[i // 2, j // 2]
        img2[i + 1, j + 1] = img1[i // 2, j // 2]
cv2.imshow("", img2)
cv2.waitKey()
  • 邻近插值法,扩大图片宽高

import cv2
import numpy as np

# 读取图像
img1 = cv2.imread("./images/cat.jpg", 0)
print(img1.shape)

# 获取图像的高度和宽度
h = img1.shape[0]
w = img1.shape[1]

# 创建一个与原图像大小相同的矩阵,用于存储拼接后的图像
img2 = np.zeros([h * 2, w * 2], dtype='uint8')

# 遍历拼接后的图像矩阵
for i in range(0, h * 2, 2):
    for j in range(0, w * 2, 2):
        # 将原图像的像素值复制到拼接后的图像矩阵中
        img2[i, j] = img1[i // 2, j // 2]
        img2[i + 1, j] = img1[i // 2, j // 2]
        img2[i, j + 1] = img1[i // 2, j // 2]
        img2[i + 1, j + 1] = img1[i // 2, j // 2]

# 显示拼接后的图像
cv2.imshow("", img2)
print(img2.shape)

# 等待按键
cv2.waitKey()

绘图函数

画框

import cv2 as cv

img = cv.imread("./images/cat.jpg")
# 左上角坐标,右下角坐标,颜色,线宽
cv.rectangle(img,(70,30),(280,210),(0,0,255),2)
cv.imshow("cat",img)
cv.waitKey(0)

画圆

img = cv.imread("./images/cat.jpg")
# 圆心坐标,半径,颜色,线宽
cv.circle(img,(170,120),100,(0,0,255),2)
cv.imshow("cat",img)
cv.waitKey()

图像上添加文字

img = cv.imread('./images/cat.jpg')

# 图像,文字(不能写中文),起始坐标,字体,字体大小系数,颜色,字体粗细
cv.putText(img, 'black cat', (20, 40), cv.FONT_HERSHEY_SIMPLEX,1, (0, 0, 255), 2)
cv.imshow('', img)
cv.waitKey()

图像上添加中文(PIL和Opencv互转)

import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np

img = cv2.imread('./images/cat.jpg')  # OpenCV读取为numpy.ndarray()类型
cv2img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # opencv读取通道顺序B、G、R
# opencv是numpy.ndarray()类型 & PIL.Image.open()是WebPImageFile类型
pilimg = Image.fromarray(cv2img)  # numpy.ndarray()转换为PIL.Image.Image()类型
draw = ImageDraw.Draw(pilimg)
font = ImageFont.truetype("msjhbd.ttc", 20, encoding="utf-8")
draw.text((20, 20), "黑猫", (255, 0, 0), font=font)
# PIL图片 -->numpy.ndarray() --> OpenCV图片
cv2charimg = cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR)
cv2.imshow("cat", cv2charimg)
cv2.waitKey(0)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值