我正在制作一个过滤器/像素操作程序。基本上我已经完成了这一切,唯一的错误是当用户输入没有提示的其他内容时,例如'x'而不是'a'等。我尝试了“try:”和“除了ValueError:”语句但我猜那是错误的。这是重要的代码代码:
# Variables for image selection *for assigning string color only*
print("What image would you like to utilize? City Image: 'A', Dog Image: 'B', or Statue of Liberty: 'C'")
# Image selection input
img_input = input('Choose Image: ').casefold()
# Assign image choice char
img_choices = ['a', 'b', 'c']
# If Statements for opening image of choice
if img_input == img_choices[0]:
img = Image.open('subjectIMG.jpg')
elif img_input == img_choices[1]:
img = Image.open('subjectIMG0.jpg')
elif img_input == img_choices[2]:
img = Image.open('subjectIMG2.jpg')
# For visuals only
time.sleep(0.8), print('\nChoosing your image....\n')
time.sleep(0.8), print('Image choosen!\n'), time.sleep(0.8)
# Rescales image to preferred size
width, height = img.width, img.height
xwidth, yheight = width // 1000, height // 1000
if xwidth > yheight:
scale = xwidth
else:
scale = yheight
if scale != 0:
img = img.resize( (width // scale, height // scale) )
# Filter One
def invert_distort(display_algorithm, image_filter_inverted):
# Get pixel data (every pixel) and make new list
pixels_get = img.getdata()
pixel_list = []
# Go through every pixel in image and append every pixel to list
for p in pixels_get:
pixel_list.append(p)
# Pixel location and row
pixel_location = 0
pixel_row = 0
# Begin while loop at index 0 in order to loop through every pixel
while pixel_location < len(pixel_list):
p = pixel_list[pixel_location]
# Prints current row and pixel color values
if display_algorithm == 'y':
print(f'Current row: {pixel_row}: {p}')
pixel_row += 1
if display_algorithm == 'n':
pass
# Pixel Manipulation
# If user enters accordingly, Colors Red, Green, Blue set into variables
xr, xg, xb = 0, 0, 0
if image_filter_inverted in image_filter_inverted_choices[0]:
xr, xg, xb = 0, 1, 2
elif image_filter_inverted in image_filter_inverted_choices[1]:
xr, xg, xb = 2, 2, 2
# Red, Green, Blue sorted into pixel list
r, g, b = p[xr], p[xg], p[xb]
# RGB values assigned to r, g, b
absr, absg, absb = 255, 255, 255
# Absolute value of pixels from red, green blue taken.
# RBG values assigned, stored into variables below.
update_r, update_g, update_b = abs(r-absr), abs(g-absg), abs(b-absb)
# New values assigned at specific pixel location
pixel_list[pixel_location] = (update_r, update_g, update_b)
pixel_location = pixel_location + 1
# New image created using same size and RGB format
final_image = Image.new("RGB", img.size)
final_image.putdata(pixel_list)
# Filter from PIL applied to new image
filter_applied = final_image.filter(ImageFilter.SHARPEN)
return filter_applied
# Filter Two
def drawing_filter(display_algorithm, image_filter_drawing):
# Get pixel data (every pixel) and make new list
pixels_get = img.getdata()
pixel_list = []
# Go through every pixel in image and append every pixel to list
for p in pixels_get:
pixel_list.append(p)
# Pixel location and row
pixel_location = 0
pixel_row = 0
# Begin while loop at index 0 in order to loop through every pixel
while pixel_location < len(pixel_list):
p = pixel_list[pixel_location]
# Prints current row and pixel color values
if display_algorithm == 'y':
print(f'Current row: {pixel_row}: {p}')
pixel_row += 1
if display_algorithm == 'n':
pass
# Pixel Manipulation
# Colors Red, Green, Blue set into variables
xr, xg, xb = 2, 2, 2
# Red, Green, Blue sorted into pixel list
r, g, b = p[xr], p[xg], p[xb]
# RGB values assigned to r, g, b
absr, absg, absb = 255, 255, 255
# Absolute value of pixels from red, green blue taken.
# RBG values assigned, stored into variables below.
update_r, update_g, update_b = abs(r-absr), abs(g-absg), abs(b-absb)
# New values assigned at specific pixel location
pixel_list[pixel_location] = (update_r, update_g, update_b)
pixel_location = pixel_location + 1
# New image created using same size and RGB format
final_image = Image.new("RGB", img.size)
final_image.putdata(pixel_list)
# If statement applies, filter added to new image
# Filter from PIL applied to new image
if image_filter_drawing in image_filter_drawing_choices[0]:
filter_applied = final_image.filter(ImageFilter.CONTOUR)
return filter_applied
elif image_filter_drawing in image_filter_drawing_choices[1]:
filter_applied = final_image.filter(ImageFilter.EMBOSS)
return filter_applied
# Filter Three
def constant_filter(display_algorithm):
# Get pixel data (every pixel) and make new list
pixels_get = img.getdata()
pixel_list = []
# Go through every pixel in image and append every pixel to list
for p in pixels_get:
pixel_list.append(p)
# Pixel location and row
pixel_location = 0
pixel_row = 0
# Begin while loop at index 0 in order to loop through every pixel
while pixel_location < len(pixel_list):
p = pixel_list[pixel_location]
# Prints current row and pixel color values
if display_algorithm == 'y':
print(f'Current row: {pixel_row}: {p}')
pixel_row += 1
if display_algorithm == 'n':
pass
# Pixel Manipulation
# Colors Red, Green, Blue set into variables
xr, xg, xb = 0, 1, 2
# Red, Green, Blue sorted into pixel list
r, g, b = p[xr], p[xg], p[xb]
# RBG values assigned, stored into variables below.
update_r, update_g, update_b = r, g, b
# New values assigned at specific pixel location
pixel_list[pixel_location] = (update_r, update_g, update_b)
pixel_location = pixel_location + 1
# New image created using same size and RGB format
final_image = Image.new("RGB", img.size)
final_image.putdata(pixel_list)
# First Enhance Applied
applyOne = ImageEnhance.Contrast(final_image)
# Second Enhance Applied
applyTwo = applyOne.enhance(0.5)
# Final form stored into new variable
filter_applied = applyTwo
return filter_applied
# Permit user to choose to see algorithm visuals
display_algorithm = input("Would you like to see the back-end (algorithm) process? Enter 'Y' or 'N': ").casefold()
# Takes user input on main filter decision
image_filter_main = input("\nChoose a filter: Inverted: 'A', Drawing: 'B', or Contrast: 'C': ").casefold()
# Main Filter choices
image_filter_main_choices = ['a', 'b', 'c']
# If statments based off user input
# Functions called: invert_distort(), drawing_filter(), constant_filter()
# Function invert_distort() if statment
if image_filter_main in image_filter_main_choices[0]:
# Choose type of filter based off invert filter
image_filter_inverted = input("\nChoose: Negative: 'A' or Monochrome: 'B': ").casefold()
image_filter_inverted_choices = ['a', 'b']
# Begin code duration time
initiate = datetime.now()
# Call function
invert_distort(display_algorithm, image_filter_inverted)
# Store function in a new variable
imageInvert = invert_distort(display_algorithm, image_filter_inverted)
print("\nFinishing your image...")
# Save Image (create new image)
imageInvert.save("InvertIMG.jpg")
# Function drawing_filter() if statement
if image_filter_main in image_filter_main_choices[1]:
# Choose type of filter based off drawing filter
image_filter_drawing = input("\nChoose: Sketch: 'A' or Engraving: 'B': ").casefold()
image_filter_drawing_choices = ['a', 'b']
# Begin code duration time
initiate = datetime.now()
# Call function
drawing_filter(display_algorithm, image_filter_drawing)
# Store function in a new variable
imageDrawing = drawing_filter(display_algorithm, image_filter_drawing)
print("\nFinishing your image...")
# Save Image (create new image)
imageDrawing.save("DrawingIMG.jpg")
# Function constant_filter() if statement
if image_filter_main in image_filter_main_choices[2]:
# Begin code duration time
initiate = datetime.now()
# Call function
constant_filter(display_algorithm)
# Store function in a new variable
imageFirm = constant_filter(display_algorithm)
print("\nFinishing your image...")
# Save Image (create new image)
imageFirm.save("ConstantIMG.jpg")
# End code duration time
# Print total duration of code
terminate = datetime.now()
print('\nDuration to execute code: {}'.format(colored((terminate - initiate), 'blue')))
很抱歉这个非常大的片段,它只是从顶部链接到底部代码的一个输入。如果有人可以帮助我,我将很高兴。不知道要包括哪个具体部分,所以我包括了最重要的部分。