import cv2
import numpy
image=cv2.imread("13.jpg")
image=image.astype(numpy.float32)
image=image[:,:,:1]+image[:,:,1:2]+image[:,:,2:3]
# 建设一个像素代表实际像素的100000
long_data=100000
cols_list=[]
rows_list=[]
for i in range(image.shape[1]-2):
h2=(image[:,i:i+1, :]-image[:,i+1:i+2, :])**2
value_av=numpy.sqrt(h2/(h2+long_data))
cols_list.append(value_av)
cols_list=numpy.hstack(cols_list)
# 光线的纵向夹角
col=numpy.max(cols_list)
x_max=numpy.argmax(cols_list)//cols_list.shape[1]
y_max=numpy.argmax(cols_list)%cols_list.shape[1]
# 色差最大的两个点
for i in range(image.shape[0]-2):
h2=(image[i:i+1,:, :]-image[i+1:i+2,:, :])**2
value_av=numpy.sqrt(h2/(h2+long_data))
rows_list.append(value_av)
rows_list=numpy.vstack(rows_list)
# 光线的横向夹角
row=numpy.max(rows_list)
x__max=numpy.argmax(rows_list)//rows_list.shape[1]
y__max=numpy.argmax(rows_list)%rows_list.shape[1]
# 色差最大的两个点
print(image.shape,x_max,y_max,x__max,y__max,col,row)
image=cv2.imread("13.jpg")
cv2.line(image,(x_max,y_max),(x__max,y__max),5)
cv2.imwrite("131.jpg",image)
# 光线的横纵夹角才能代表光作用于三维世界 也就是说光平面代表光的方向,人的眼睛可以虚拟出来光平面
# 可以写作z=ax+by
# 在long_data=1000000实际比例一定的情况先不同的图片的光平面是不一样的也就是col和row不一样
# 然而一般素描图片两个亮度点距离比较远距离比较立体
# 正常相机拍出来的两个点会十分的接近 所以就是个平面
# 所以根据光平面改造图片
# 最适合的两个点就是光平面和sensor焦线上的点,加入x,y坐标形成的面是sensor(可以是图片)(焦线的两端3分之一处)
# 最好是图片的中心作为坐标的中心点 与y的焦点是(图片的一半,-a/b )与x是(-b/a,图片的一半) (负号代表图片的坐下方)这样直接就得出了也不用考虑太多
# 将图片改造参考上面的算法,相邻的点相减,得到h也就是控制相减的h,最后倒退回去,在使用原始图片三个通道的比例分成h即可
if __name__ == '__main__':
pass
同理可以实现多个不同位置的感光最大位置
这样多个图片在像视频一样播放是不是会全息 当然这里使用的是最大
也可以使用平均光平面,
还有一个猜想就是一个素描还是普通的图片都是一个光平面,
如果通过上面的方法自定义光平面多个,为一个图片,也是有可能实现全息图片的