spacepaste

  1.  
  2. #!/usr/bin/python
  3. import traceback
  4. import sys, math, os
  5. import copy
  6. from PIL import Image, ImageDraw
  7. import cv2
  8. import numpy as np
  9. #import gui_related
  10. import wx
  11. app = wx.App(False)
  12. #print wx.GetDisplaySize()
  13. lines=[]
  14. filename='noyes2.str'
  15. with open(os.path.join(os.path.dirname(__file__), filename), 'rb') as fl:
  16. lines=fl.read()
  17. bmp=[]
  18. print 'A5 at: ', lines.index('\xA5')
  19. pixes=[]
  20. pix=[]
  21. class fib_pattern(object):
  22. def write_as_12_bit(self, lines):
  23. #fl1=open('out.txt1', 'wb')
  24. i=lines.index('\xd7') - 3
  25. firstTime=True
  26. size = (4096, 4096) # size of the image to create
  27. im = Image.new('L', size) # create the image, 'L' for greyscale
  28. self.maxX=0
  29. self.maxY=0
  30. self.minY=4096
  31. self.minX=4096
  32. while True:
  33. try:
  34. b1 = ord(lines[i])
  35. b2 = ord(lines[i+1])
  36. b3 = ord(lines[i+2])
  37. b4 = ord(lines[i+3])
  38. #something to do with how nybble order gets packed by C compilers
  39. nib1 = b2 >> 4
  40. nib2 = b2 & 0xF
  41. x = b1 | (nib2<<8)
  42. y = (b3<<4) | nib1
  43. dwell = b4
  44. #keep some statistics
  45. if x>self.maxX:
  46. self.maxX=x
  47. if y>self.maxY:
  48. self.maxY=y
  49. if x<self.minX:
  50. self.minX=x
  51. if y<self.minY:
  52. self.minY=y
  53. #write the pixel to the image
  54. im.putpixel((x,y), dwell)
  55. #advance by 4 bytes
  56. i+=4
  57. except IndexError:
  58. break
  59. im.save('out_test1.png', 'PNG')
  60. print "maxX %d, maxY %d" % (self.maxX, self.maxY)
  61. print "minX %d, minY %d" % (self.minX, self.minY)
  62. print 'num pixels: %d' % (i/4)
  63. self.numPixels = (i/4)
  64. def write_as_video(self, lines):
  65. #fl1=open('out.txt1', 'wb')
  66. i=lines.index('\xd7') - 3
  67. print 'i', i
  68. firstTime=True
  69. size = (4096, 4096) # size of the image to create
  70. #im = Image.new('L', size) # create the image, 'L' for greyscale
  71. width = (self.maxX - self.minX) + 1
  72. height = (self.maxY - self.minY) + 1
  73. print 'width %d height %d maxX %d minX %d maxY %d minY %d' % (width, height, self.maxX, self.minX, self.maxY, self.minY)
  74. #out = cv2.VideoWriter('output.avi',cv2.cv.CV_FOURCC('D', 'I', 'V', 'X'), 20.0, (width,height))
  75. #fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', 'v') # note the lower case
  76. #fourcc = cv2.cv.CV_FOURCC('M','J','P','G')
  77. #fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', '2')
  78. #fourcc = cv2.cv.CV_FOURCC('i','Y','U', 'V')#'D','I','V','X') #CAP_PROP
  79. #fourcc = cv2.cv.CV_FOURCC(*'XVID')
  80. #print fourcc
  81. #out = cv2.VideoWriter()
  82. #success = out.open('output.avi',0,30,( width, height),True)
  83. m = max(width, height)
  84. #out = cv2.VideoWriter("test.avi", cv2.cv.CV_FOURCC('i','Y','u','v'), #'F', 'M', 'P', '4'),'H', '2', '6', '4'
  85. # 30, (width, height), False) #import cv syntax CreateVideoWriter
  86. #out = cv2.VideoWriter("testmp42.mp4", cv2.cv.CV_FOURCC('M','P','4','2'), #'F', 'M', 'P', '4'),'H', '2', '6', '4' 'D','I','V','3' (works oks)
  87. # 90, (width, height), False) #'X','2','6','4' width, height
  88. #out = cv2.VideoWriter("testmp4.avi", cv2.cv.CV_FOURCC('D','I','V','3'), 30, (width, height), True)
  89. #out = cv2.VideoWriter("test_x264.avi", cv2.cv.CV_FOURCC('X','2','6','4'), 30, (width, height), True)
  90. #print 'video opened? %s' % out.isOpened()
  91. #print success
  92. blank_image = np.zeros((width, height,1), np.uint8)
  93. #blank_image = cv2.cv.CreateImage((m, m), 8, 1)
  94. #cv_image = cv2.cv.CreateImage((height, width), cv2.IPL_DEPTH_8U,1)
  95. cv2.namedWindow('FIB pattern raster sequence')#, cv2.CV_WINDOW_NORMAL|cv2.CV_WINDOW_KEEPRATIO | cv2.CV_GUI_EXPANDED)
  96. lastKey=0
  97. #available_screen_size = gui_related.get_available_screen_size()
  98. topBarHeight, sideBarWidth, widthAvailable, heightAvailable = wx.ClientDisplayRect()
  99. heightAvailable -= topBarHeight # account for the highGui window's title bar
  100. if width > widthAvailable:
  101. scaleWidth=float(widthAvailable)/width
  102. else:
  103. scaleWidth = 1
  104. if height > heightAvailable:
  105. scaleHeight = float(heightAvailable)/height
  106. else:
  107. scaleHeight = 1
  108. scale = min(scaleWidth, scaleHeight)
  109. scaled_frame_size = (int(width*scale), int(height*scale))
  110. while True:
  111. try:
  112. b1 = ord(lines[i])
  113. b2 = ord(lines[i+1])
  114. b3 = ord(lines[i+2])
  115. b4 = ord(lines[i+3])
  116. #something to do with how nybble order gets packed by C compilers
  117. nib1 = b2 >> 4
  118. nib2 = b2 & 0xF
  119. x = b1 | (nib2<<8)
  120. y = (b3<<4) | nib1
  121. dwell = b4
  122. #write the pixel to the image
  123. #im.putpixel((x,y), dwell)
  124. blank_image[(y-self.minY, x-self.minX)] = dwell
  125. #cv2.SetReal2D(blank_image, x-self.minX,y-self.minY, dwell)
  126. #cv2.cv.WriteFrame(out,
  127. #im = cv2.cv.fromarray(blank_image)
  128. #cv2.Set2D(cv_image, x, y, dwell)
  129. #advance by 4 bytes
  130. i+=4
  131. if i%256==0:
  132. pass
  133. #out.write(cv2.cvtColor(blank_image,cv2.COLOR_GRAY2RGB))
  134. #out.write(blank_image)
  135. #cv2.WriteFrame(out, blank_image)
  136. #blank_image = cv.CreateImage((width, height), 8, 1)
  137. #cv2.SetZero(blank_image)
  138. #cv2.imshow('img1',blank_image)
  139. #cv2.waitKey(30) # Waits forever for user to press any key
  140. #print 'frame'
  141. #blank_image = np.zeros((width,height,1), np.uint8)
  142. if (i/4%(self.numPixels/100)==1):
  143. print 'percent done: %d' % (float(i/4) / self.numPixels *100)
  144. if not lastKey == 27:
  145. cv2.imshow('FIB pattern raster sequence',cv2.resize(blank_image, scaled_frame_size) )
  146. lastKey = cv2.waitKey(30) # Waits forever for user to press any key
  147. print i/4, self.numPixels
  148. except IndexError:
  149. print "IndexError, last tuple started at byte: %d " % (i - 4)
  150. #traceback.print_exc()
  151. #out.write(blank_image)
  152. #out.write(cv2.cvtColor(blank_image,cv2.COLOR_GRAY2RGB))
  153. #out.write(blank_image)
  154. #cv2.waitKey(30)
  155. break
  156. #im.save('out_test1.png', 'PNG')
  157. #out.release()
  158. #out=None
  159. print "maxX %d, maxY %d" % (self.maxX, self.maxY)
  160. print "minX %d, minY %d" % (self.minX, self.minY)
  161. print 'num pixels: %d' % (i/4)
  162. while cv2.waitKey(0) != 27:
  163. cv2.imshow('FIB pattern raster sequence',cv2.resize(blank_image, scaled_frame_size) )
  164. cv2.destroyAllWindows()
  165. def write_image(img):
  166. w = max([p[0] for p in img])
  167. h = max([p[1] for p in img])
  168. size = (4096, 4096) # size of the image to create
  169. im = Image.new('L', size) # create the image
  170. draw = ImageDraw.Draw(im) # create a drawing object that is
  171. # used to draw on the new image
  172. red = (255,0,0) # color of our text
  173. table = sum(zip(*img), ())
  174. #draw.point(img)
  175. im.putdata(table)
  176. """
  177. #fff7fb
  178. #ece7f2
  179. #d0d1e6
  180. #a6bddb
  181. #74a9cf
  182. #3690c0
  183. #0570b0
  184. #034e7b
  185. """
  186. del draw # I'm done drawing so I don't need this anymore
  187. im.save('out_test1.png', 'PNG')
  188. pat = fib_pattern()
  189. pat.write_as_12_bit(copy.deepcopy(lines))
  190. pat.write_as_video(lines)
  191. #write_as_byte_w_offset(lines)
  192. #write_image(pixes)
  193. sys.exit(1)
  194. pixels = []
  195. pix=[0,0,0]
  196. """
  197. for i in range(0, len(lines), 2):
  198. #num = int(lines[i].encode('hex'), 16)
  199. num = struct.unpack( "H", lines[i:i+2] )
  200. sys.stdout.write(str(num))
  201. pix[i%3]=num
  202. if i%3 ==2:
  203. print ''
  204. pixels.append((pix[0], pix[1], pix[2]))
  205. else:
  206. sys.stdout.write(', ')
  207. #print c, '\t %s' % lines[i]
  208. """
  209. fl=open(filename, 'rb')
  210. for i in range(0,8):
  211. fl.read(1)
  212. r = BitReader(fl)
  213. i=0
  214. j=0
  215. while True:
  216. b1 = fl.read(1)
  217. b23 = fl.read(1)
  218. b3_latter = fl.read(1)
  219. b2 = ord(b23)>>4 & (int('f',16))
  220. if not i==2:
  221. x = r.readbits(12)
  222. else:
  223. x = r.readbits(8)
  224. if ( r.read == 0 ):
  225. break
  226. pix[i%3]=x
  227. i+=1
  228. if i==3:
  229. pixels.append((pix[0], pix[1], pix[2]))
  230. #print '%s, %s, %s' % (pix[0], pix[1], pix[2])
  231. i=0
  232. j+=1
  233. #if j==50:
  234. # break
  235. h = max([p[0] for p in pixels])
  236. w = max([p[1] for p in pixels])
  237. z = max([p[2] for p in pixels])
  238. print 'maxes of h: %s, w: %s, z: %s' %(h, w, z)
  239. import array
  240. pixmap = [array.array('i',(0 for i in range(0,h+1))) for i in range(0,h+1)]
  241. for pixel in pixels:
  242. pixmap[pixel[0]][pixel[1]] = pixel[2]
  243. pixlist = []
  244. fl1=open('out.raw', 'wb')
  245. for i in range(0, h):
  246. for j in range(0, w):
  247. fl1.write(struct.pack('i', pixmap[i][j]))
  248. fl1.close()
  249. fl.close()
  250.