正如Abid Rahaman K所评论的那样,使用numpy数组进行简单算术运算是最快的。
以此图片为例:http://i.imgur.com/Yjo276D.png
这里有一个类似于亮度/对比度调整的图像处理示例:
'''
Simple and fast image transforms to mimic:
- brightness
- contrast
- erosion
- dilation
'''
import cv2
from pylab import array, plot, show, axis, arange, figure, uint8
image = cv2.imread('imgur.png',0)
cv2.imshow('image',image)
maxIntensity = 255.0
x = arange(maxIntensity)
phi = 1
theta = 1
newImage0 = (maxIntensity/phi)*(image/(maxIntensity/theta))**0.5
newImage0 = array(newImage0,dtype=uint8)
cv2.imshow('newImage0',newImage0)
cv2.imwrite('newImage0.jpg',newImage0)
y = (maxIntensity/phi)*(x/(maxIntensity/theta))**0.5
newImage1 = (maxIntensity/phi)*(image/(maxIntensity/theta))**2
newImage1 = array(newImage1,dtype=uint8)
cv2.imshow('newImage1',newImage1)
z = (maxIntensity/phi)*(x/(maxIntensity/theta))**2
figure()
plot(x,y,'r-')
plot(x,x,'k:')
plot(x,z, 'b-')
axis('tight')
show()
closeWindow = -1
while closeWindow<0:
closeWindow = cv2.waitKey(1)
cv2.destroyAllWindows()
原始灰度图像:
![enter image description here](https://istack.dev59.com/Zh5bH.webp)
明亮的图像看起来似乎被膨胀了:
![enter image description here](https://istack.dev59.com/d4PWo.webp)
变暗的图像看起来被侵蚀、锐化,并具有更好的对比度:
![enter image description here](https://istack.dev59.com/jICZl.webp)
像素强度的转换方式:
![enter image description here](https://istack.dev59.com/63CBQ.webp)
如果你调整 phi
和 theta
的值,可以得到非常有趣的结果。你也可以将此技巧应用于多通道图像数据。
--- 编辑 ---
在这个YouTube视频中,查看Photoshop中“级别”和“曲线”的概念:http://youtu.be/hZeMqXxMG_8。线性变换方程会在每个像素上创造相同数量即“水平”的变化。如果你编写一个可以区分像素类型(例如那些已经具有某个值的像素)的方程式,则可以根据该方程式描述的“曲线”更改像素。
X = aY + b
,其中a
和b
是标量。这是一种线性变换。我在答案中展示了二次变换,它产生了更有趣的结果 ;) - samkhan13