DIP_UN_00

实验准备

使用CV读取和显示图像

import cv2 as cv

img = cv.imread("D:\\DIP_PHOTO\\Jiangyiyi.jpg")
cv.imshow("Demo", img)

cv.waitKey(0)
cv.destroyAllWindows()

使用Pyplot显示

import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread("D:\\DIP_PHOTO\\Jiangyiyi.jpg", 0)

plt.imshow(img, 'gray')
plt.title('Jiangyiyi')

plt.show()

cv.waitKey(0)
cv.destroyAllWindows()

简单键盘响应和写入

import cv2 as cv

img = cv.imread("D:\\DIP_PHOTO\\Jiangyiyi.jpg", 1)

cv.imshow("Demo", img)

k = cv.waitKey(0)
if k == 27:                     # 按 Esc 退出
    cv.destroyAllWindows()
elif k == ord('s'):             # 按 's' 保存并退出
    cv.imwrite("Jiangyiyi.tif", img)
    cv.destroyAllWindows()

创建空图像并复制

import numpy as np
import cv2 as cv

img = cv.imread("D:\\DIP_PHOTO\\Jiangyiyi.jpg")

emptyImage1 = np.zeros(img.shape, np.uint8)      # 创建空图像
emptyImage2 = img.copy()    # 复制图像

cv.imshow("Demo1", img)
cv.imshow("Demo2", emptyImage1)
cv.imshow("Demo3", emptyImage2)

cv.waitKey(0)
cv.destroyAllWindows()

保存为不同格式

import cv2 as cv

# 关于图像写入
# retval = imwrite(filename, img[, params])
# – filename表示要保存的路径及文件名
# – img表示图像矩阵
# – params表示特定格式保存的参数编码,默认值为空。
# – 对于JPEG图片,params参数(cv2.IMWRITE_JPEG_QUALITY)表示图像的质量,用0-100的整数表示,默认值为95。
# – 对于PNG图片,该参数(cv2.IMWRITE_PNG_COMPRESSION)表示的是压缩级别,从0到9,压缩级别越高,图像尺寸越小,默认级别为3。
# – 对于PPM、PGM、PBM图片,该参数表示一个二进制格式的标志(cv2.IMWRITE_PXM_BINARY)。注意,该类型为Long,必须转换成int。

img = cv.imread("D:\\DIP_PHOTO\\Jiangyiyi.jpg")

cv.imshow("Demo", img)

cv.imwrite("dst1.jpg", img, [int(cv.IMWRITE_JPEG_QUALITY), 5])
cv.imwrite("dst2.jpg", img, [int(cv.IMWRITE_JPEG_QUALITY), 100])
cv.imwrite("dst3.png", img, [int(cv.IMWRITE_PNG_COMPRESSION), 0])
cv.imwrite("dst4.png", img, [int(cv.IMWRITE_PNG_COMPRESSION), 9])

cv.waitKey(0)
cv.destroyAllWindows()

改变图像尺寸并输出属性

import cv2 as cv

img = cv.imread("D:\\DIP_PHOTO\\Jiangyiyi.jpg")
img = cv.resize(img, (256, 256))
cv.imshow("Demo", img)

print(img.shape)    # 获取图像形状
print(img.size)     # 获取像素数目
print(img.dtype)    # 获取图像数据类型

cv.waitKey(0)
cv.destroyAllWindows()

改变1个像素值

import cv2 as cv

img = cv.imread("D:\\DIP_Photo\\Lenna_RGB.tif", cv.IMREAD_UNCHANGED)

Pixel_x = 100
Pixel_y = 100

img[Pixel_x, Pixel_y] = [255, 255, 255]

# 分别获取BGR通道像素
blue = img[Pixel_x, Pixel_y, 0]
print(blue)
green = img[Pixel_x, Pixel_y, 1]
print(green)
red = img[Pixel_x, Pixel_y, 2]
print(red)

cv.imshow("Demo", img)

cv.waitKey(0)
cv.destroyAllWindows()

图像逻辑操作

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

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 方形图
rectangle = np.zeros((400, 400), dtype='uint8')
cv2.rectangle(rectangle, (50, 50), (350, 350), 255, -1)

# 圆形图
circle = np.zeros((400, 400), dtype='uint8')
cv2.circle(circle, (200, 200), 180, 255, -1)

# 图像逻辑运算
bitwiseAnd = cv2.bitwise_and(rectangle, circle)
bitwiseOr = cv2.bitwise_or(rectangle, circle)
bitwiseXor = cv2.bitwise_xor(rectangle, circle)
bitwiseNot = cv2.bitwise_not(rectangle)

titles = ['方形图', '圆形图', 'And', 'Or', 'Xor', 'Not']
images = [rectangle, circle, bitwiseAnd, bitwiseOr, bitwiseXor, bitwiseNot]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i], fontsize=12)
    plt.xticks([]), plt.yticks([])
plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()

打开默认摄像头

import cv2 as cv

cap = cv.VideoCapture(0)

while True:
    success, img = cap.read()
    cv.imshow('Video', img)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
cv.destroyAllWindows()

图像尺寸变化与截取

import cv2 as cv

img = cv.imread("D:\\DIP_Photo\\Lenna_RGB.tif")
print(img.shape)

imgResize = cv.resize(img, (640, 640))
print(imgResize.shape)

imgCropped = img[64:448, 64:448]
print(imgCropped)

cv.imshow("Lenna", img)
cv.imshow("Lenna_Resize", imgResize)
cv.imshow("Lenna_Cropped", imgCropped)

cv.waitKey()
cv.destroyAllWindows()

OpenCV简单绘图

import cv2 as cv
import numpy as np

img = np.zeros((256, 256, 3), np.uint8)

for i in range(32, 236, 12):
    cv.line(img, (32, i), (224, i), (0, 255, 0), 1)
    cv.line(img, (i, 32), (i, 224), (0, 0, 255), 1)
cv.imshow("Grid Image", img)

for i in range(0, 256, 1):
    cv.line(img, (0, i), (256, i), (i, 0, 0), 1)

for i in range(20, 100, 20):
    cv.circle(img, (127, 127), i, (255, 255, 255), 3)

cv.imshow("Blue Image", img)
print(img.shape)

cv.waitKey()
cv.destroyAllWindows()

再次修改1个像素点

import cv2 as cv
import numpy as np

img = np.zeros((8, 8), dtype=np.uint8)

print("img=\n", img)
cv.imshow("one", img)
print("读取像素点[3,3]=", img[3, 3])
img[3, 3] = 127

print("修改后的像素点[3,3]=", img[3, 3])
cv.imshow("two", img)

print("img=\n", img)

cv.waitKey(0)
cv.destroyAllWindows()

修改区域像素点

import cv2 as cv

img = cv.imread("D:\\DIP_Photo\\Lenna_RGB.tif")

cv.imshow("Before", img)

for i in range(10, 20):
    for j in range(10, 500):
        img[i, j] = 255, 255, 255

for i in range(490, 500):
    for j in range(10, 500):
        img[i, j] = 255, 255, 255

cv.imshow("After", img)
cv.waitKey()
cv.destroyAllWindows()

结束

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值