Szeretnék csinálni, egy olyan programot python-ban, ami már a képkockákra szétbontott fekete-fehér videó pixeleit nullásokra és egyesekre bontja (0 = fekete 1 = fehér), de nem úgy mint egy átlagos ASCII videó, hanem minden pixel külön listában. ?
Nyílván, hogy gyorsabb legyen, le van butítva a videó felbontása. Próbáltam már az ASCII-t, de ez nem telljesen olyan lenne, vagy lehet, hogy igen. (Python e részéhez nem értek sajna) Úgy kéne, hogy minden pixelt egy külön listában tárolná el. Szóval minden pixelnek kéne, hogy legyen egy saját listája, ahol eltárolja, hogy az első képkockában még ez 0 volt a 2. ban 1, a 3. ban 1... ez így lenne minden pixellel.
pl:
1x1(ez a bal felső első pixel)[0(első képkocka) ,0(második képkocka) ,0(...) ,1,1,0,1,0,1,0...]
1x2(első sor második oszlop pixel)[0,1,0,0,0,1,0...]
1x3[1,0,1,0,0,0,0,1,0]
1x4...
2x1(ez a második sor első oszlop)...
2x2...
És miután kész van, kiprinteli az összes kész listát.
Letöltöttem egy célomra hasonló kódot, ami viszont nem úgy működik, mint akarom, de talán az alapjai megvannak.
Itt a kód:
import time
from PIL import Image
CLIP_FRAMES = 6571
CLIP_LENGTH = 219.0666
ASCII_CHARS = ['0','0','0','0','0','0','1','1','1','1','1']
ASCII_CHARS.reverse()
ASCII_CHARS = ASCII_CHARS[::-1]
WIDTH = 40
TIMEOUT = 1/((int(CLIP_FRAMES/4)+1)/CLIP_LENGTH)*18
def resize(image, new_width=WIDTH):
(old_width, old_height) = image.size
aspect_ratio = float(old_height)/float(old_width)
new_height = int((aspect_ratio * new_width)/2)
new_dim = (new_width, new_height)
new_image = image.resize(new_dim)
return new_image
def grayscalify(image):
return image.convert('L')
def modify(image, buckets=25):
initial_pixels = list(image.getdata())
new_pixels = [ASCII_CHARS[pixel_value//buckets] for pixel_value in initial_pixels]
return ''.join(new_pixels)
def do(image, new_width=WIDTH):
image = resize(image)
image = grayscalify(image)
pixels = modify(image)
len_pixels = len(pixels)
new_image = [pixels[index:index+int(new_width)] for index in range(0, len_pixels, int(new_width))]
return '\n'.join(new_image)
def runner(path):
image = None
try:
image = Image.open(path)
except Exception:
print("Unable to find image in",path)
return
image = do(image)
return image
frames = []
pix1 = ""
for i in range(0, int(CLIP_FRAMES/4)+1):
path = "frames/frame"+str(i*4)+".jpg"
frames.append(runner(path))
oldTimestamp = time.time()
start = oldTimestamp
seconds = 0
minutes = 0
i = 0
while i < len(frames)-1:
disp = False
while not disp:
newTimestamp = time.time()
if (newTimestamp - oldTimestamp) >= TIMEOUT:
print(frames[int(i)])
newTimestamp = time.time()
i += (newTimestamp - oldTimestamp)/TIMEOUT
oldTimestamp = newTimestamp
disp = True
Remélhetőleg nem hagytam ki semmit. Előre is köszönöm a segítséget! :)
Ha mégis valami nem stimmel, amint tudom, megpróbálok segíteni. Nagyon örülnék, ha valaki tudna segíteni, egy fun kis project-et akarok ezzel kezdeni.
(Bocsánat ha bénázok, nem vagyok még nagyon jártas Gyakori kérdésekben)
Ez valami CT-felvételehez kell?
Kipróbáltam egy tök CT-felvételén:
https://www.youtube.com/watch?v=uetp6HnfYjk
youtube-dl segítségével letöltöttem a legnagyobb (558x480-as) felbontású és (12 fps) képkocka-sebességű változatot:
youtube-dl -f 135 https://www.youtube.com/watch?v=uetp6HnfYjk # 558x480
ffmpeg segítségével kiszedtem a felvétel tartalmi részét (419x407-as felbontás) egy "oldframes" mappába képkockánként (171 darab)
ffmpeg -i video.mp4 -filter:v "crop=419:407:70:27" oldframes/video_%d.png
majd megcsináltam a topiknyitó kérdésben szereplő módon a szkriptet, ami betölti a képeket az "oldframes" mappából egy 3 dimenziós tömbbe, majd a tömb "elforgatása" után kigenerálja a képkockákat a "newframes" mappába:
a 12. sor befolyásolja, hogy melyik legyen a vízszintes (alapesetben 418 pixel), melyik a függőleges (alapesetben 406 pixel), és melyik az "időbeli" (alapesetben 171 képkocka) koordináta:
* [0,1,2] esetén 418x406x171: [link]
* [1,2,0] esetén 171x418x406: [link]
* [2,1,0] esetén 171x406x418: [link]
képek összefűzése GIF-animációba például:
ffmpeg -f image2 -framerate 12 -i newframes/video_%d.png xy.gif
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!