コード例 #1
0
ファイル: 02_4_final-cut.py プロジェクト: jnv/cinemetrics
def main():
	global startframe

	tree = utils.open_project(sys.argv)
	if tree == None:
		return

	os.chdir("shot_slitscans")

	'''cv.NamedWindow("win", cv.CV_WINDOW_AUTOSIZE)
	cv.MoveWindow("win", 500, 200)
	cv.SetMouseCallback("win", mouse_callback)'''

	bg_img = cv.CreateImage((576, 576), cv.IPL_DEPTH_8U, 1)
	#cv.Set(bg_img, (180))

	files = sorted( glob.glob("*.png") )
	print(files)

	i = 0
	while i < len(files):
		file = files[i]
		startframe = int( file.split("_")[3].split(".")[0] )
		print(startframe)

		cap = cv.CreateFileCapture(file)
		img = cv.QueryFrame(cap)

		win_name = "%d" % (int(float(i+1)*100.0/len(files))) + "% - " + file
		cv.NamedWindow(win_name, cv.CV_WINDOW_AUTOSIZE)
		cv.MoveWindow(win_name, 500, 200)
		cv.SetMouseCallback(win_name, mouse_callback)

		cv.ShowImage(win_name, bg_img)
		cv.ShowImage(win_name, img)

		key = cv.WaitKey(0)
		print(key)
		if key in [2555904, 1113939]: # right arrow
			i += 1
		elif key in [2424832, 1113937]: # left arrow
			i -= 1
			if i < 0:
				i = 0
		elif key in [27, 1048603]: # ESC
			break
		elif key in [1113941]: # page up
			i -= 100
			if i < 0:
				i = 0
		elif key in [1113942]: # page down
			i += 100
		else:
			print("Unknown key code: {}".format(key))

		cv.DestroyWindow(win_name)

	src_dir = os.path.dirname(sys.argv[0])
	os.chdir(src_dir)
	os.system("python 02_2_save-shots.py \"" + sys.argv[1] + "\"")
コード例 #2
0
ファイル: 02_4_final-cut.py プロジェクト: jnv/cinemetrics
def main():
    global startframe

    tree = utils.open_project(sys.argv)
    if tree == None:
        return

    os.chdir("shot_slitscans")
    '''cv.NamedWindow("win", cv.CV_WINDOW_AUTOSIZE)
	cv.MoveWindow("win", 500, 200)
	cv.SetMouseCallback("win", mouse_callback)'''

    bg_img = cv.CreateImage((576, 576), cv.IPL_DEPTH_8U, 1)
    #cv.Set(bg_img, (180))

    files = sorted(glob.glob("*.png"))
    print(files)

    i = 0
    while i < len(files):
        file = files[i]
        startframe = int(file.split("_")[3].split(".")[0])
        print(startframe)

        cap = cv.CreateFileCapture(file)
        img = cv.QueryFrame(cap)

        win_name = "%d" % (int(
            float(i + 1) * 100.0 / len(files))) + "% - " + file
        cv.NamedWindow(win_name, cv.CV_WINDOW_AUTOSIZE)
        cv.MoveWindow(win_name, 500, 200)
        cv.SetMouseCallback(win_name, mouse_callback)

        cv.ShowImage(win_name, bg_img)
        cv.ShowImage(win_name, img)

        key = cv.WaitKey(0)
        print(key)
        if key in [2555904, 1113939]:  # right arrow
            i += 1
        elif key in [2424832, 1113937]:  # left arrow
            i -= 1
            if i < 0:
                i = 0
        elif key in [27, 1048603]:  # ESC
            break
        elif key in [1113941]:  # page up
            i -= 100
            if i < 0:
                i = 0
        elif key in [1113942]:  # page down
            i += 100
        else:
            print("Unknown key code: {}".format(key))

        cv.DestroyWindow(win_name)

    src_dir = os.path.dirname(sys.argv[0])
    os.chdir(src_dir)
    os.system("python 02_2_save-shots.py \"" + sys.argv[1] + "\"")
コード例 #3
0
def main():

    tree = utils.open_project(sys.argv)
    if tree == None:
        return

    try:
        os.mkdir(OUTPUT_DIR)
    except OSError:
        pass

    movie = tree.getroot()
    file_path = movie.attrib["path"]
    #fps = float( movie.attrib["fps"] )

    cap = cv.CreateFileCapture(file_path)
    cv.QueryFrame(cap)

    # skip frames in the beginning, if neccessary
    start_frame = int(movie.attrib["start_frame"])
    for i in range(start_frame):
        cv.QueryFrame(cap)

    end_frame = int(movie.attrib["end_frame"])
    every_nth_frame = int((end_frame - start_frame) / 100)
    print "every", every_nth_frame, "frames"
    #print "=", every_nth_frame / fps, "sec"
    frame = start_frame
    counter = 1

    while 1:
        print counter
        img = cv.QueryFrame(cap)
        if not img or frame > end_frame:
            break

        img_small = cv.CreateImage(
            (WIDTH, int(img.height * float(WIDTH) / img.width)),
            cv.IPL_DEPTH_8U, 3)
        cv.Resize(img, img_small, cv.CV_INTER_CUBIC)

        cv.SaveImage(os.path.join(OUTPUT_DIR, "still_%07d.jpg" % (frame)),
                     img_small)

        for i in range(every_nth_frame - 1):
            cv.GrabFrame(cap)

        frame += every_nth_frame
        counter += 1

    #raw_input("- done -")
    return
コード例 #4
0
ファイル: 02_5_100-stills.py プロジェクト: deric/cinemetrics
def main():

	tree = utils.open_project(sys.argv)
	if tree == None:
		return
	
	try:
		os.mkdir(OUTPUT_DIR)
	except OSError:
		pass
	
	
	movie = tree.getroot()
	file_path = movie.attrib["path"]
	#fps = float( movie.attrib["fps"] )
	
	cap = cv.CreateFileCapture(file_path)
	cv.QueryFrame(cap)
	
	# skip frames in the beginning, if neccessary
	start_frame = int( movie.attrib["start_frame"] )
	for i in range(start_frame):
		cv.QueryFrame(cap)
	
	end_frame = int( movie.attrib["end_frame"] )
	every_nth_frame = int( (end_frame - start_frame) / 100 )
	print "every", every_nth_frame, "frames"
	#print "=", every_nth_frame / fps, "sec"
	frame = start_frame
	counter = 1
	
	while 1:
		print counter
		img = cv.QueryFrame(cap)
		if not img or frame > end_frame:
			break
		
		img_small = cv.CreateImage((WIDTH, int( img.height * float(WIDTH)/img.width )), cv.IPL_DEPTH_8U, 3)
		cv.Resize(img, img_small, cv.CV_INTER_CUBIC)
		
		cv.SaveImage(os.path.join(OUTPUT_DIR,"still_%07d.jpg" % (frame)), img_small)
		
		for i in range(every_nth_frame-1):
			cv.GrabFrame(cap)
		
		frame += every_nth_frame
		counter += 1
	
	#raw_input("- done -")
	return
コード例 #5
0
def main():

	tree = utils.open_project(sys.argv)
	if tree == None:
		return

	try:
		os.mkdir(OUTPUT_DIR)
	except OSError:
		pass


	movie = tree.getroot()
	file_path = movie.attrib["path"]
コード例 #6
0
def main():

    tree = utils.open_project(sys.argv)
    if tree == None:
        return

    #frames = [os.path.splitext(file)[0] for file in os.listdir(os.getcwd() + "\\" + OUTPUT_DIR_NAME) if not os.path.isdir(file)]

    frames = [
        os.path.splitext(os.path.basename(file))[0]
        for file in glob.glob(os.path.join(OUTPUT_DIR_NAME, "*.png"))
    ]  #os.getcwd() + "\\" +
    frames = [int(frame) for frame in frames]
    frames = sorted(frames)

    movie = tree.getroot()
    # frame count
    movie.set("frames", str(frames[-1] - frames[0]))
    movie.set("start_frame", str(frames[0]))
    movie.set("end_frame", str(frames[-1] - 1))
    tree.write("project.xml")

    f = open(os.path.join(os.getcwd(), "shots.txt"), "w")

    for i, frame in enumerate(frames):
        if i == len(frames) - 1:
            break

        f.write(
            str(frame) + "\t" + str(frames[i + 1] - 1) + "\t" +
            str(frames[i + 1] - frame) + "\n")

        if i > 0:
            diff = frames[i] - frames[i - 1]
            if abs(diff) <= 5:
                print "%d -> %d: %d" % (frames[i - 1], frames[i], diff)

    f.close()
    print "don't forget to add FPS information!"
    raw_input("- done -")
    return
コード例 #7
0
def main():

    tree = utils.open_project(sys.argv)
    if tree == None:
        return

        # frames = [os.path.splitext(file)[0] for file in os.listdir(os.getcwd() + "\\" + OUTPUT_DIR_NAME) if not os.path.isdir(file)]

    frames = [
        os.path.splitext(os.path.basename(file))[0] for file in glob.glob(os.path.join(OUTPUT_DIR_NAME, "*.png"))
    ]  # os.getcwd() + "\\" +
    frames = [int(frame) for frame in frames]
    frames = sorted(frames)

    movie = tree.getroot()
    # frame count
    movie.set("frames", str(frames[-1] - frames[0]))
    movie.set("start_frame", str(frames[0]))
    movie.set("end_frame", str(frames[-1] - 1))
    tree.write("project.xml")

    f = open(os.path.join(os.getcwd(), "shots.txt"), "w")

    for i, frame in enumerate(frames):
        if i == len(frames) - 1:
            break

        f.write(str(frame) + "\t" + str(frames[i + 1] - 1) + "\t" + str(frames[i + 1] - frame) + "\n")

        if i > 0:
            diff = frames[i] - frames[i - 1]
            if abs(diff) <= 5:
                print "%d -> %d: %d" % (frames[i - 1], frames[i], diff)

    f.close()
    print "don't forget to add FPS information!"
    raw_input("- done -")
    return
コード例 #8
0
def main():
    BLACK_AND_WHITE = False
    THRESHOLD = 0.48
    BW_THRESHOLD = 0.4

    if len(sys.argv) < 2:
        print "usage: %s project_dir [bw]" % (sys.argv[0])
        return

    if len(sys.argv) > 2:
        if sys.argv[2] == "bw":
            BLACK_AND_WHITE = True
            THRESHOLD = BW_THRESHOLD
            print " B/W MODE"

    tree = utils.open_project(sys.argv, False)
    if tree == None:
        return

    try:
        os.mkdir(OUTPUT_DIR_NAME)
    except:
        pass

    movie = tree.getroot()
    file_path = movie.attrib["path"]
    cap = cv.CreateFileCapture(file_path)

    if DEBUG:
        cv.NamedWindow("win", cv.CV_WINDOW_AUTOSIZE)
        cv.MoveWindow("win", 200, 200)

    hist = None
    prev_hist = None
    prev_img = None

    pixel_count = None
    frame_counter = 0

    last_frame_black = False
    black_frame_start = -1

    t = time.time()

    while 1:
        img_orig = cv.QueryFrame(cap)

        if not img_orig:  # eof
            output_file = os.path.join(OUTPUT_DIR_NAME,
                                       "%06d.png" % (frame_counter - 1))
            cv.SaveImage(output_file, prev_img)
            """movie.set("frames", str(frame_counter))
			tree.write("project.xml")"""
            break

        img = cv.CreateImage(
            (int(img_orig.width / 4), int(img_orig.height / 4)),
            cv.IPL_DEPTH_8U, 3)
        cv.Resize(img_orig, img, cv.CV_INTER_AREA)

        if frame_counter == 0:  # erster frame
            cv.SaveImage(os.path.join(OUTPUT_DIR_NAME, "%06d.png" % (0)), img)
            pixel_count = img.width * img.height
            prev_img = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
            cv.Zero(prev_img)

        if DEBUG and frame_counter % 2 == 1:
            cv.ShowImage("win", img)

        img_hsv = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
        cv.CvtColor(img, img_hsv, cv.CV_BGR2HSV)

        # #####################
        # METHOD #1: find the number of pixels that have (significantly) changed since the last frame
        diff = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
        cv.AbsDiff(img_hsv, prev_img, diff)
        cv.Threshold(diff, diff, 10, 255, cv.CV_THRESH_BINARY)
        d_color = 0
        for i in range(1, 4):
            cv.SetImageCOI(diff, i)
            d_color += float(cv.CountNonZero(diff)) / float(pixel_count)

        if not BLACK_AND_WHITE:
            d_color = float(d_color / 3.0)  # 0..1

        # #####################
        # METHOD #2: calculate the amount of change in the histograms
        h_plane = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
        s_plane = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
        v_plane = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
        cv.Split(img_hsv, h_plane, s_plane, v_plane, None)
        planes = [h_plane, s_plane, v_plane]

        hist_size = [50, 50, 50]
        hist_range = [[0, 360], [0, 255], [0, 255]]
        if not hist:
            hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, hist_range, 1)
        cv.CalcHist([cv.GetImage(i) for i in planes], hist)
        cv.NormalizeHist(hist, 1.0)

        if not prev_hist:
            prev_hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, hist_range,
                                      1)
            # wieso gibt es kein cv.CopyHist()?!
            cv.CalcHist([cv.GetImage(i) for i in planes], prev_hist)
            cv.NormalizeHist(prev_hist, 1.0)
            continue

        d_hist = cv.CompareHist(prev_hist, hist, cv.CV_COMP_INTERSECT)

        # combine both methods to make a decision
        if ((0.4 * d_color + 0.6 * (1 - d_hist))) >= THRESHOLD:
            if DEBUG:
                if frame_counter % 2 == 0:
                    cv.ShowImage("win", img)
                #winsound.PlaySound(soundfile, winsound.SND_FILENAME|winsound.SND_ASYNC)
            print "%.3f" % ((0.4 * d_color + 0.6 * (1 - d_hist))), "%.3f" % (
                d_color), "%.3f" % (1 - d_hist), frame_counter
            if DEBUG and DEBUG_INTERACTIVE:
                #if win32api.MessageBox(0, "cut?", "", win32con.MB_YESNO) == 6: #yes
                #	cv.SaveImage(OUTPUT_DIR_NAME + "\\%06d.png" % (frame_counter), img)
                pass
            else:
                cv.SaveImage(OUTPUT_DIR_NAME + "\\%06d.png" % (frame_counter),
                             img)

        cv.CalcHist([cv.GetImage(i) for i in planes], prev_hist)
        cv.NormalizeHist(prev_hist, 1.0)

        # #####################
        # METHOD #3: detect series of (almost) black frames as an indicator for "fade to black"
        average = cv.Avg(v_plane)[0]
        if average <= 0.6:
            if not last_frame_black:  # possible the start
                print "start", frame_counter
                black_frame_start = frame_counter
            last_frame_black = True
        else:
            if last_frame_black:  # end of a series of black frames
                cut_at = black_frame_start + int(
                    (frame_counter - black_frame_start) / 2)
                print "end", frame_counter, "cut at", cut_at
                img_black = cv.CreateImage(
                    (img_orig.width / 4, img_orig.height / 4), cv.IPL_DEPTH_8U,
                    3)
                cv.Set(img_black, cv.RGB(0, 255, 0))
                cv.SaveImage(OUTPUT_DIR_NAME + "\\%06d.png" % (cut_at),
                             img_black)
            last_frame_black = False

        cv.Copy(img_hsv, prev_img)
        frame_counter += 1

        if DEBUG:
            if cv.WaitKey(1) == 27:
                break

    if DEBUG:
        cv.DestroyWindow("win")

    print "%.2f min" % ((time.time() - t) / 60)
    #raw_input("- done -")
    return
コード例 #9
0
def main():
	BLACK_AND_WHITE = False
	THRESHOLD = 0.48
	BW_THRESHOLD = 0.4

	if len(sys.argv) < 2:
		print "usage: %s project_dir [bw]"%(sys.argv[0])
		return
	
	if len(sys.argv) > 2:
		if sys.argv[2] == "bw":
			BLACK_AND_WHITE = True
			THRESHOLD = BW_THRESHOLD
			print " B/W MODE"

			
	tree = utils.open_project(sys.argv, False)
	if tree == None:
		return 

	try:
		os.mkdir(OUTPUT_DIR_NAME)
	except:
		pass
	
	movie = tree.getroot()
	file_path = movie.attrib["path"]
	print "path: %s"%(file_path)
	
	if not os.path.isfile(file_path): 
	  print "ERROR: file '%s' does not exist"%(file_path)
	  return
	
	cap = cv.CreateFileCapture(file_path)
	print "FPS: %s"%(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FPS))
	 
	print "Frame width: %s"%(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_WIDTH))
	
	if DEBUG:
		cv.NamedWindow("win", cv.CV_WINDOW_AUTOSIZE)
		cv.MoveWindow("win", 200, 200)

	hist = None
	prev_hist = None
	prev_img = None

	pixel_count = None
	frame_counter = 0

	last_frame_black = False
	black_frame_start = -1

	t = time.time()

	while 1:
		img_orig = cv.QueryFrame(cap)
		
		if not img_orig: # eof
			output_file = os.path.join(OUTPUT_DIR_NAME, "%06d.png"% (frame_counter-1))
			cv.SaveImage(output_file, prev_img)
			"""movie.set("frames", str(frame_counter))
			tree.write("project.xml")"""
			break
		
		img = cv.CreateImage((int(img_orig.width/4), int(img_orig.height/4)), cv.IPL_DEPTH_8U, 3)
		cv.Resize(img_orig, img, cv.CV_INTER_AREA)
		
		if frame_counter == 0: # erster frame
			cv.SaveImage(os.path.join(OUTPUT_DIR_NAME,"%06d.png" % (0)), img)
			pixel_count = img.width * img.height
			prev_img = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
			cv.Zero(prev_img)
		
		if DEBUG and frame_counter % 2 == 1:
			cv.ShowImage("win", img)
		
		img_hsv = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
		cv.CvtColor(img, img_hsv, cv.CV_BGR2HSV)
		
		# #####################
		# METHOD #1: find the number of pixels that have (significantly) changed since the last frame
		diff = cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
		cv.AbsDiff(img_hsv, prev_img, diff)
		cv.Threshold(diff, diff, 10, 255, cv.CV_THRESH_BINARY)
		d_color = 0
		for i in range(1, 4):
			cv.SetImageCOI(diff, i)
			d_color += float(cv.CountNonZero(diff)) / float(pixel_count)
		
		if not BLACK_AND_WHITE:
			d_color = float(d_color/3.0) # 0..1
		
		# #####################
		# METHOD #2: calculate the amount of change in the histograms
		h_plane = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
		s_plane = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
		v_plane = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
		cv.Split(img_hsv, h_plane, s_plane, v_plane, None)
		planes = [h_plane, s_plane, v_plane]
		
		hist_size = [50, 50, 50]
		hist_range = [[0, 360], [0, 255], [0, 255]]
		if not hist:
			hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, hist_range, 1)
		cv.CalcHist([cv.GetImage(i) for i in planes], hist)
		cv.NormalizeHist(hist, 1.0)
		
		if not prev_hist:
			prev_hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, hist_range, 1)
			# wieso gibt es kein cv.CopyHist()?!
			cv.CalcHist([cv.GetImage(i) for i in planes], prev_hist)
			cv.NormalizeHist(prev_hist, 1.0)
			continue
		
		d_hist = cv.CompareHist(prev_hist, hist, cv.CV_COMP_INTERSECT)
		
		# combine both methods to make a decision
		if ((0.4*d_color + 0.6*(1-d_hist))) >= THRESHOLD:
			if DEBUG:
				if frame_counter % 2 == 0:
					cv.ShowImage("win", img)
				#winsound.PlaySound(soundfile, winsound.SND_FILENAME|winsound.SND_ASYNC)
			print "%.3f" % ((0.4*d_color + 0.6*(1-d_hist))), "%.3f" % (d_color), "%.3f" % (1-d_hist), frame_counter
			if DEBUG and DEBUG_INTERACTIVE:
				#if win32api.MessageBox(0, "cut?", "", win32con.MB_YESNO) == 6: #yes
				#	cv.SaveImage(OUTPUT_DIR_NAME + "\\%06d.png" % (frame_counter), img)
				pass
			else:
				cv.SaveImage(os.path.join(OUTPUT_DIR_NAME, "%06d.png" % (frame_counter)), img)
		
		cv.CalcHist([cv.GetImage(i) for i in planes], prev_hist)
		cv.NormalizeHist(prev_hist, 1.0)
		
		# #####################
		# METHOD #3: detect series of (almost) black frames as an indicator for "fade to black"
		average = cv.Avg(v_plane)[0]
		if average <= 0.6:
			if not last_frame_black: # possible the start
				print "start", frame_counter
				black_frame_start = frame_counter
			last_frame_black = True
		else:
			if last_frame_black: # end of a series of black frames
				cut_at = black_frame_start + int( (frame_counter - black_frame_start) / 2 )
				print "end", frame_counter, "cut at", cut_at
				img_black = cv.CreateImage((img_orig.width/4, img_orig.height/4), cv.IPL_DEPTH_8U, 3)
				cv.Set(img_black, cv.RGB(0, 255, 0))
				cv.SaveImage(os.path.join(OUTPUT_DIR_NAME, "%06d.png" % (cut_at)), img_black)
			last_frame_black = False
		
		cv.Copy(img_hsv, prev_img)
		frame_counter += 1
		
		if DEBUG:
			if cv.WaitKey(1) == 27:
				break
		

	if DEBUG:
		cv.DestroyWindow("win");
	
	print "%.2f min" % ((time.time()-t) / 60)
	#raw_input("- done -")
	return
コード例 #10
0
def main():

    tree = utils.open_project(sys.argv)
    if tree == None:
        return

    try:
        os.mkdir(OUTPUT_DIR_NAME)
    except OSError:
        pass

    movie = tree.getroot()
    file_path = movie.attrib["path"]

    cap = cv.CreateFileCapture(file_path)
    cv.QueryFrame(cap)

    # skip frames in the beginning, if neccessary
    start_frame = int(movie.attrib["start_frame"])
    for i in range(start_frame):
        cv.QueryFrame(cap)

    f = open("shots.txt", "r")
    lines = [line for line in f if line]
    f.close()

    t = time.time()

    w = None
    h = None

    #for line in f:
    for nr, line in enumerate(lines):
        print(nr + 1), "/", len(lines)

        #frame_from, frame_to, width, scene_nr = [int(i) for i in line.split("\t")]
        #width, scene_nr = [int(i) for i in line.split("\t")][2:]
        start_frame, end_frame, width = [
            int(splt) for splt in line.split("\t")
        ]
        #width *= STRETCH_FAKTOR

        faktor = None
        output_img = None

        for frame_counter in range(width):
            #if frame_counter % STRETCH_FAKTOR == 0:
            #	img = cv.QueryFrame(cap)
            #	if not img:
            #		break

            img = cv.QueryFrame(cap)
            if not img:
                break

            if nr == 0:
                w = img.width
                h = img.height

            if frame_counter == 0:
                faktor = float(w) / float(width)
                output_img = cv.CreateImage((width, h), cv.IPL_DEPTH_8U, 3)

            col_nr = faktor * (frame_counter + 0.5)
            col_nr = int(math.floor(col_nr))
            #print frame_counter, width, col_nr, w
            col = cv.GetCol(img, col_nr)

            for i in range(h):
                cv.Set2D(output_img, i, frame_counter, cv.Get1D(col, i))

        #return

        cv.SaveImage(
            os.path.join(OUTPUT_DIR_NAME,
                         "shot_slitscan_%03d_%d.png" % (nr + 1, start_frame)),
            output_img)

    print "%.2f min" % ((time.time() - t) / 60)
    #raw_input("- done -")
    return
コード例 #11
0
def main():
	global startframe

	tree = utils.open_project(sys.argv)
	if tree == None:
		return

	os.chdir("shot_slitscans")

	'''cv.NamedWindow("win", cv.CV_WINDOW_AUTOSIZE)
	cv.MoveWindow("win", 500, 200)
	cv.SetMouseCallback("win", mouse_callback)'''

	bg_img = cv.CreateImage((576, 576), cv.IPL_DEPTH_8U, 1)
	#cv.Set(bg_img, (180))

	files = sorted( glob.glob("*.png") )
	print(files)

	i = 0
	while i < len(files):
		file = files[i]
		startframe = int( file.split("_")[3].split(".")[0] )
		print(startframe)

		cap = cv.CreateFileCapture(file)
		img = cv.QueryFrame(cap)

		win_name = "%d" % (int(float(i+1)*100.0/len(files))) + "% - " + file
		cv.NamedWindow(win_name, cv.CV_WINDOW_AUTOSIZE)
		cv.MoveWindow(win_name, 500, 200)
		cv.SetMouseCallback(win_name, mouse_callback)

		cv.ShowImage(win_name, bg_img)
		cv.ShowImage(win_name, img)

		key = cv.WaitKey(0)
		print(key)
		if key in [65363]: # right arrow
			i += 1
		elif key in [65361]: # left arrow
			i -= 1
			if i < 0:
				i = 0
		elif key in [27, 1048603]: # ESC
			break
		elif key in [65365]: # page up
			i -= 100
			if i < 0:
				i = 0
		elif key in [65366]: # page down
			i += 100
		else:
			print("Unknown key code: {}".format(key))

		cv.DestroyWindow(win_name)

	#print("System input arguments: " + sys.argv[0] + " " + sys.argv[1])
	os.chdir("/vagrant") # Now that we're using Vagrant to wrapup everything, this should work to get to the root of the project directory
	#os.system("ls -a")
	os.system("python 02_2_save-shots.py \"" + sys.argv[1] + "\"")
コード例 #12
0
ファイル: 02_3_shot-slitscan.py プロジェクト: jnv/cinemetrics
def main():

	tree = utils.open_project(sys.argv)
	if tree == None:
		return

	try:
		os.mkdir(OUTPUT_DIR_NAME)
	except OSError:
		pass

	movie = tree.getroot()
	file_path = movie.attrib["path"]

	cap = cv.CreateFileCapture(file_path)
	cv.QueryFrame(cap)

	# skip frames in the beginning, if neccessary
	start_frame = int( movie.attrib["start_frame"] )
	for i in range(start_frame):
		cv.QueryFrame(cap)

	f = open("shots.txt", "r")
	lines = [line for line in f if line]
	f.close()

	t = time.time()

	w = None
	h = None

	#for line in f:
	for nr, line in enumerate(lines):
		print (nr+1), "/", len(lines)

		#frame_from, frame_to, width, scene_nr = [int(i) for i in line.split("\t")]
		#width, scene_nr = [int(i) for i in line.split("\t")][2:]
		start_frame, end_frame, width = [int(splt) for splt in line.split("\t")]
		#width *= STRETCH_FAKTOR

		faktor = None
		output_img = None

		for frame_counter in range(width):
			#if frame_counter % STRETCH_FAKTOR == 0:
			#	img = cv.QueryFrame(cap)
			#	if not img:
			#		break

			img = cv.QueryFrame(cap)
			if not img:
				break

			if nr == 0:
				w = img.width
				h = img.height

			if frame_counter == 0:
				faktor = float(w) / float(width)
				output_img = cv.CreateImage((width, h), cv.IPL_DEPTH_8U, 3)

			col_nr = faktor * (frame_counter+0.5)
			col_nr = int( math.floor(col_nr) )
			#print frame_counter, width, col_nr, w
			col = cv.GetCol(img, col_nr)

			for i in range(h):
				cv.Set2D(output_img, i, frame_counter, cv.Get1D(col, i))

		#return

		cv.SaveImage(os.path.join(OUTPUT_DIR_NAME,"shot_slitscan_%04d_%06d.png" % (nr+1, start_frame)), output_img)

	print("%.2f min" % ((time.time()-t) / 60))
	#raw_input("- done -")
	return