import
matplotlib
.
pyplot
as
mpl
from
urllib
.
parse
import
urlparse
import
urllib
.
robotparser
def
canFetch
(
url
)
:
parsed_uri
=
urlparse
(
url
)
domain
=
'{uri.scheme}://{uri.netloc}/'
.
format
(
uri
=
parsed_uri
)
rp
=
urllib
.
robotparser
.
RobotFileParser
(
)
rp
.
set_url
(
domain
+
"/robots.txt"
)
try
:
rp
.
read
(
)
canFetchBool
=
rp
.
can_fetch
(
"*"
,
url
)
except
:
canFetchBool
=
None
return
canFetchBool
这里我选择了一张曝光度不够高的图片
查看是不是能通过打开,如果能,就用urllib打开图片
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591003793908&di=6ea0016b97fbcfe029c040421a585e33&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Ffront%2F265%2Fw640h425%2F20181002%2FeAw0-hktxqah3979676.jpg'
if canFetch(url):
image = Image.open(urllib.request.urlopen(url))
display(image)
我们将长和宽都除以4,相当于变成了原来图片1/16的大小。
sImg = image
w,h=sImg.size
dImg=sImg.resize((int(w/4),int(h/4)),Image.ANTIALIAS)
display(dImg)
首先我们要知道RGB是Red,Green,Blue红绿蓝。图片里所有的色块都是由这三个参数组成的。
我们可以将我们的图片转换成一个np.array:
print(np.array(dImg).shape)
np.array(dImg)
大概是这样
(106, 160, 3)
array([[[74, 78, 89],
[76, 80, 92],
[77, 81, 92],
...,
[70, 74, 85],
[70, 75, 86],
[72, 76, 88]],
[[70, 76, 90],
[71, 78, 92],
[72, 78, 92],
...,
[68, 74, 88],
[68, 74, 88],
[66, 73, 86]],
[[67, 77, 93],
[69, 78, 95],
[69, 79, 95],
...,
[65, 75, 91],
[64, 73, 89],
[61, 70, 87]],
...,
[[10, 14, 23],
[10, 14, 23],
[10, 14, 23],
...,
[ 3, 6, 15],
[ 5, 8, 17],
[ 5, 8, 17]],
[[ 9, 13, 22],
[ 9, 13, 22],
[ 9, 13, 22],
...,
[ 1, 4, 13],
[ 2, 5, 14],
[ 2, 5, 14]],
[[ 9, 13, 22],
[ 9, 13, 22],
[ 9, 13, 22],
...,
[ 2, 5, 14],
[ 1, 4, 13],
[ 0, 3, 12]]], dtype=uint8)
shape为(106,160,3)。
106是图片的高,160是图片的长,第三个数就是RGB的长度(都是3)
每一行的第一个数就是Red系数,越高(最高255)代表红色越多,越低(最低0)代表红色越少。
全黑是(0,0,0)
全白是(255,255,255)
正红色是(255,0,0)
绿色,蓝色同理。
在明白了这个array究竟有什么意义之后,我们来增加明亮度。
越接近255,也就越偏向白色。所以我们要做的就是增加array里每一个数值
bright_arr = np.array(dImg)*2.5
bright_arr = bright_arr.astype('uint8')
image_bright = Image.fromarray(bright_arr)
display(image_bright)
我们可以通过将每个色块(pixel)红色的指数全部改成200.
bright_arr[:,:,0] = 200
bright_arr = bright_arr.astype('uint8')
image_red = Image.fromarray(bright_arr)
display(image_red)
当然我们可以通过自己“调色”,添加除了基础色以外的滤镜。比如我知道红加蓝等于紫色。我可以加一个紫色滤镜
bright_arr[:,:,0] = 200
bright_arr[:,:,2] = 200
bright_arr = bright_arr.astype('uint8')
image_purple = Image.fromarray(bright_arr)
display(image_purple)
PIL有很多的filter,可以百度一下都有哪些。这里我应用了模糊滤镜,将原来清晰的图片变得模糊。
blurred_image = image_purple.filter(ImageFilter.BLUR)
display(blurred_image)
亮度是指图片的明暗程度,对比度是指图片明暗的差异,饱和度则是指图片颜色的饱满程度。在计算机中每个图片上的像素点都由三个字节来进行表示,分别代表着像素的RGB数据。 图片上每个像素的每种颜色都可以有从0到255的变化,数值越高,颜色的亮度越大,因此当改变一张图片的亮度时,实际上就是同时改变图片上每个像素的每个颜色的数值,提高图片的亮度,就是将图片上每个像素的每个颜色的数值调大,数值调小则会降低图片的亮度。
之前我们介绍了pillow的Image类的基础用法,讲解了打开图片,保存图片,翻转图片的一些方法,但是我们答应朋友的修图并没有介绍,这篇文章我们主要就来介绍一下pillow的修图功能。本文主要介绍了pillow的ImageEnhance模块增强图片效果的方法,我们可以使用增强亮度,增强色度以及增强对比度的方法来增强我们图片的效果,这几个方法可以替代一些美颜滤镜的功能,希望能够帮到我在内的部分单身狗。更多技术文章。
python实现图片变亮或者变暗的方法
这篇文章主要介绍了python实现图片变亮或者变暗的方法,涉及Python中Image模块操作图片的相关技巧,分享给大家供大家参考。具体实现方法如下:
import Image
# open an image file (.jpg or.png) you have in the working folder
im1 = Image.ope
用python实现图片的缩放,颜色转换,图像增强,调节亮度等。
from PIL import Image
import matplotlib.pyplot as plt
import os
import matplotlib.image as mpimg
from scipy import misc
from skimage import data, exposure, img_as_float, color
from PIL import Image,ImageFilter
import numpy a
对图像处理来说,numpy数组是非常重要的。图像由像素值网格构成,numpy数组更像列表,更适合用于科学计算。
为什么需要numpy进行图像处理
当我们想将图像的亮度提升2倍,直接对列表进行乘法计算。
a = [1,2,3,4,5]
b = 2*a
print(b)
结果如下。这个结果并不是我们想看到的,它仅仅是将同一列表进行两次连接。这也是为什么我们需要用的numpy数组进行图像计算。
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
在numpy中进行相同的操作
使用pillow.Image加载图片之后需要转换格式才能应用函数:
加载图片,转换格式(这个函数只能处理numpy数组格式所以可以使用下面函数转换,也可以转换成numpy数组格式):
fi...
图像处理中,图像亮度调节可能是最简单的算法了,非常常见的线性运算即可完成亮度调节,比如所有像素点亮度值乘或者加一个增强系数,使得图像整体变亮或者变暗。photoshop中是如何实现的不得而知,每个版本可能也不一样。还是说说我的实现方法,其实就是在调节过程中,根据像素点亮度,做非线性调节,即高光、阴影部分调节小一点,中间部分多调节一些,这样亮度调节看着更自然一些。
文章目录1.模糊2.灰度3.亮度4.对比度5.饱和度6.色相反转7.反色8.阴影9。透明度10.褐色CSS3 Filter(滤镜)属性提供了提供模糊和改变元素颜色的功能。CSS3 Fitler 常用于调整图像的渲染、背景或边框显示效果。-webkit-filter是css3的一个属性,Webkit率先支持了这几个功能,感觉效果很不错。下面咱们就学习一下filter这个属性吧。现在规范中支持的效果有...