python+opencv 图像读取保存

import cv2
# 图像读取
img = cv2.imread('image0.jpg', 1)  # 1读入彩色图像 0读入灰度图像 彩色图像是BGR
cv2.imshow('BGR', img)
cv2.waitKey(0)
# 转换成RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imshow('RGB', img)
cv2.waitKey(0)

读张图像,显示一下

# 读灰度图像
gray1 = cv2.imread('image0.jpg', 0)
cv2.imshow('gray1', gray1)
cv2.waitKey(0)
gray2 = cv2.imread('image0.jpg', cv2.IMREAD_GRAYSCALE)  # cv2.IMREAD_UNCHANGED 包含alpha通道(透明度)
cv2.imshow('gray2', gray2)
cv2.waitKey(0)
# 使用颜色转换函数cv2.cvtColor 读进来是彩色图像才能转
# 第三种方式感觉更清晰?
gray3 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray3', gray3)
cv2.waitKey(0)

三种变成灰度图像的方式
有啥区别?

# 图像质量
import cv2
img = cv2.imread('image0.jpg',1)
# 这压缩质量出来的图像不太好
cv2.imwrite('imageTest1.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,50])
img1=cv2.imread('imageTest1.jpg')
cv2.imshow('img1',img1)
cv2.waitKey(0)
#1M 100k 10k 0-100 有损压缩
# 1 无损 2 透明度属性
import cv2
img = cv2.imread('image0.jpg',1)
cv2.imwrite('imageTest2.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
img2=cv2.imread('imageTest2.png')
cv2.imshow('img2',img2)
cv2.waitKey(0)
# jpg 0 压缩比高0-100 png 0 压缩比低0-9
# 图像写入,存储
cv2.imwrite('image1.jpg', img)  # 改了个名

保存的时候,可以选择图像的质量

# 像素操作
import cv2
img = cv2.imread('image0.jpg',1)
cv2.imshow('image',img)
cv2.waitKey(0) #1000 ms
print(img.shape)
# (547,730,3)
print(img.size)
print(img.dtype)
(b,g,r) = img[100,100]
print(b,g,r)# bgr
#10 100 --- 110 100
for i in range(1,100):
    img[10+i,100] = (255,0,0)
cv2.imshow('image',img)
cv2.waitKey(0) #1000 ms
#数组的切片操作
roi = img[100:300,30:350,:]
cv2.imshow('image',roi)
cv2.waitKey(0)
# print(roi)

像素级的操作
图像就是矩阵,可以任意切割你想要的大小的图像
修改对应的数值,改变颜色

b,g,r = cv2.split(img) #通道分离
print(b.shape)
# (547,730)
cv2.imshow('b',b)
cv2.waitKey(0)
cv2.imshow('g',g)
cv2.waitKey(0)
cv2.imshow('r',r)
cv2.waitKey(0)
merge_img = cv2.merge((b,g,r))
cv2.imshow('image',merge_img)
cv2.waitKey(0)

分开了还是矩阵

import cv2 as cv
import numpy as np

#全局阈值
def threshold_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)  #把输入图像灰度化
    #直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
    print("threshold value %s"%ret)
    cv.namedWindow("binary0", cv.WINDOW_NORMAL)
    cv.imshow("binary0", binary)

#局部阈值
def local_threshold(image):
    gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)  #把输入图像灰度化
    #自适应阈值化能够根据图像不同区域亮度分布,改变阈值
    binary =  cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY, 25, 10)
    cv.namedWindow("binary1", cv.WINDOW_NORMAL)
    cv.imshow("binary1", binary)

#用户自己计算阈值
def custom_threshold(image):
    gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY)  #把输入图像灰度化
    h, w =gray.shape[:2]
    m = np.reshape(gray, [1,w*h])
    mean = m.sum()/(w*h)
    print("mean:",mean)
    ret, binary =  cv.threshold(gray, mean, 255, cv.THRESH_BINARY)
    cv.namedWindow("binary2", cv.WINDOW_NORMAL)
    cv.imshow("binary2", binary)

src = cv.imread('image1.jpg')
cv.namedWindow('input_image', cv.WINDOW_NORMAL) #设置为WINDOW_NORMAL可以任意缩放
cv.imshow('input_image', src)
threshold_demo(src)
local_threshold(src)
custom_threshold(src)
cv.waitKey(0)
cv.destroyAllWindows()

二值化
先把图像转成灰度图像
然后设定阈值
大于阈值的设置为255
小于的设为0
文字太多,不想解释

参考别人的,解释的老棒了
https://www.cnblogs.com/FHC1994/p/9125570.html
https://blog.csdn.net/qq_36941368/article/details/82998296
添加链接描述什么鬼。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值