Python PIL与Opencv处理图片

在这里插入图片描述
这是一张图片,可以对它进行各种处理。

灰度图

1,将图像转为灰度图,PIL
import numpy  as np
from PIL import Image
pic = Image.open("digit.jpg")
pic.show()
pic = pic.convert('L')
pic.show()
1,将图像转为灰度图,OpenCv
rawimg = cv2.imread("digit.jpg")
plt.title("grey scale image")
grayscaleimg = cv2.cvtColor(rawimg,cv2.COLOR_BGR2GRAY)
plt.imshow(grayscaleimg,cmap='gray')
plt.show()

将彩色图片处理为黑白图片
在这里插入图片描述

二值化(反向二值化)

像素点的灰度值大于该阈值的不进行任何改变,像素点的灰度值小于该阈值的,其灰度值全部变为0。

2,将图像二值化处理,PIL
img_path="digit.jpg"
image = Image.open(img_path)
Img = image.convert('L')
limit = 200
table = []
for i in range(256):
    if i < limit:
        table.append(0)
    else:
        table.append(1)
photo = Img.point(table, '1')
photo.show()
table = []
for i in range(256):
    if i < limit:
        table.append(1)
    else:
        table.append(0)
photo = Img.point(table, '1')
photo.show()
2,将图像二值化处理,OpenCv
rawimg = cv2.imread(r"digit.jpg")
fig = plt.figure(figsize=(10,15))#创建多个子图
GrayImage=rawimg
ret, binary = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY)
print("阈值:", ret)
#cv2.imshow("binary", binary)
fig.add_subplot(2,3,1)
plt.imshow(binary,cmap='gray')
ret, binary = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY_INV)
print("阈值:", ret)
#cv2.imshow("binary", binary)
fig.add_subplot(2,3,2)
plt.imshow(binary,cmap='gray')
plt.show()

参考:#https://blog.csdn.net/what_lei/article/details/49159655
在这里插入图片描述

水平垂直方向直方图

3,水平方向直方图,OpenCv
GrayImage= cv2.cvtColor(rawimg,cv2.COLOR_BGR2GRAY)
ret,image=cv2.threshold(GrayImage,130,255,cv2.THRESH_BINARY)
(h,w)=image.shape #返回高和宽
a = [0 for z in range(0, h)] 
#这里统计每一行像素个数
for j in range(0,h):  
    for i in range(0,w):  
        if  image[j,i]==0: 
            a[j]+=1 
            image[j,i]=255
            
#这里统计每一行像素个数用黑色表示
for j  in range(0,h):  
    for i in range(0,a[j]):   
        image[j,i]=0    
fig.add_subplot(2,3,3)
plt.imshow(image,cmap=plt.gray())
plt.show()
3,水平方向直方图,PIL(先二值化处理)
import cv2
import numpy as np 
from matplotlib import pyplot as plt 
from PIL import Image
import matplotlib.pyplot as plt

img_path="digit.jpg"
image=(Image.open(img_path).convert('L'))

limit = 200
table = []
for i in range(256):
    if i < limit:
        table.append(0)
    else:
        table.append(1)

image= image.point(table, '1')
image= np.array(image)
(h,w)=image.shape #返回高和宽
a = [0 for z in range(0, h)] 
#这里统计每一行像素个数
num =0 
for j in range(0,h):  
    for i in range(0,w):
        if  image[j,i]==0:
            num+=1
           
            a[j]+=1 
            image[j,i]=255
            
#这里统计每一行像素个数用黑色表示
for j  in range(0,h):  
    for i in range(0,a[j]):   
        image[j,i]=0

image=Image.fromarray(image)
image.show()


"




在这里插入图片描述

图片与矩阵转化

1,Opencv
img = Image.open(img_path)
img_array = np.asarray(img) #图片——>数组
image = np.array(image_array, np.uint8)#数组——>图片

2,PIL
image=np.array(Image.open(img_path).convert('L'))) #图片——>数组
Image.fromarray(image_array)#数组——>图片



OpenCV和PIL之间转换

from PIL import Image
import numpy as np
import cv2
img_cv=cv2.imread(img_path)
img_pil=Image.fromarray(cv2.cvtColor(img_cv,cv2.COLOR_BGR2RGB)) #opencv转为PIL
img_cv2=cv2.cvtColor(np.asarray(img_pil),cv2.COLOR_RGB2BGR)#PIL转为OpenCV
img_pil.show()

PIL,OpenCV和ndarray 数组之间转换

from PIL import Image
import numpy as np
import cv2
img_cv=cv2.imread(img_path)##opencv读取图像
img_pil=Image.open(img_path)##PIL读取图像
img_opencv_np=np.array(img_cv)#opencv转为ndarray数组
img_pil_np=np.array(img_pil)#PIL转为ndarray数组
img_pil.show()
cv2.imshow("cv",img_cv)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值