>
>
MISC-交通繁忙
yuchoxuuan
下载之后是一个傻大的gif ,拖进ps发现有很多很多很多很多帧
大体上看了一下,大概是 红绿灯闪烁,间或黄灯一闪, 疑似用三盏灯表示三种不同的信号状态
不过因为帧数太多了,所以实在懒得一个一个的数,所以,先记下来三盏灯的位置中心位置
大概是 x = 111 y = 47 96 145 的样子
然后写个简单的脚本跑一下,我代码水平不行,效率低了些,不过大体够用吧
因为复用了以前的一个陈年类,所以多了一步 Image 转 cv 的过程,如果纯为了这个题目那就是白痴了
这么写纯粹是为了将就我以前的代码。。。
class PicBits:
img = None
fn = ''
def getxy(self, x=0,y=0):
ret = [0,0,0]
height = self.img.shape[0]
weight = self.img.shape[1]
channels = self.img.shape[2]
if x < 0 : x = -x
if y < 0 : y = -y
ret =[]
for c in range(channels):
ret.append(self.img[y%height,x%weight,c])
return ret
@staticmethod
def gif2bl(fn=''):
rtl=[]
im = Image.open(fn)
print("FrameCont:",im.n_frames )
for i in range(im.n_frames):
im.seek(i)
CF=Image.new("RGBA",im.size)
CF.paste(im)
img = cv.cvtColor(np.asarray(CF),cv.COLOR_RGB2BGR)
nb = PicBits()
nb.img=img
nb.fn='Tmp'
rtl.append(nb)
return rtl
fn ="D:\\ciq\\Traffic_Light.gif.gif"
x = 111
y =[47,96,145]
o =['1',' ','0']
l= PicBits.gif2bl(fn)
for i in l:
for j in range(len(y)):
col = i.getxy(x,y[j])
dx = abs( col[0]-172) + abs(col[1]-172) + abs(col[2]-172)
dx2 = abs( col[0]-254) + abs(col[1]-254) + abs(col[2]-254)
if dx > 100 and dx2 >100 :
print(o[j],end= '')
跑完之后发现是很整齐的二进制码,所以直接转一下就出来了。
这里面有一行的存在
dx2 = abs( col[0]-254) + abs(col[1]-254) + abs(col[2]-254)
是因为群主为了让大家看得清,所以在灯光闪烁间查了一些全灰的帧进去,这行代码是为了把那些帧丢掉
简单粗暴,出题人很厚道。
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论