欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

计算一个全息图片的两个设想

程序员文章站 2022-03-07 20:50:39
import cv2import numpyimage=cv2.imread("12.jpg")image=image.astype(numpy.float32)image=image[:,:,:1]+image[:,:,1:2]+image[:,:,2:3]cols_list=[]rows_list=[]for i in range(image.shape[1]-2): v......
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

同理可以实现多个不同位置的感光最大位置 
这样多个图片在像视频一样播放是不是会全息 当然这里使用的是最大  
也可以使用平均光平面,

还有一个猜想就是一个素描还是普通的图片都是一个光平面,
如果通过上面的方法自定义光平面多个,为一个图片,也是有可能实现全息图片的

计算一个全息图片的两个设想

本文地址:https://blog.csdn.net/weixin_32759777/article/details/104856214