0

i'm new in the programingworld and I try to teach programing myself and I wanted to start with at python with an algorythm, where you can put photos, this has to be a black-and-white phote and the program will order them into greyscales and the greyscales are then divided into different dollar signs based on the strength. So I hope you understood what I am up to. Now here is the Code.

def open_image(filename):
...


def main():
intervals = [[0, 70], [71, 140], [141, 190], [191, 255]]
dollar_pixels = ["   ", " $ ", "$ $", "$$$"]
assert len(intervals) == len(dollar_pixels)

with open_image("donald.jpg") as image:
    for count, pixel in enumerate(image.get_pixels()):
        for (lower_limit, upper_limit), dollar_pixel in zip(
            intervals, dollar_pixels
        ):
            if lower_limit <= pixel <= upper_limit:
                print(dollar_pixel)
                break
        else:
            raise ValueError(f"pixel {pixel!r} not in any interval")

        if count and count % image.get_width() == 0:
            print("\n")


if __name__ == "__main__":
main()

And this is the error message:

Microsoft Windows [Version 10.0.19043.1237]
(c) Microsoft Corporation. Alle Rechte vorbehalten.

Traceback (most recent call last):
File "c:/Users/User/OneDrive/Desktop/folder1/donald.py", line 29, in <module>
main()
File "c:/Users/User/OneDrive/Desktop/folder1/donald.py", line 13, in main
with open_image("donald.jpg",) as image:
AttributeError: __enter__

I made there 3 points after def open_image(filename), because I don't realy know, what I was supossed to write and I didn't find a module to read the Photos. I hope you guys can give me an respectful answer, where you will describe every single errors of mine, things I forgot to write and the solution for all these things.

Take care Helpman88

1
  • You can use cv2.imread from the OpenCV framework to read an image Commented Oct 21, 2021 at 16:04

1 Answer 1

1

it's seem a problem with context manager (the thing that you are trying to do with " with open_image("donald.jpg") as image: " the most simple way to solve this is to assign the returning object of get_image as a variable:

    image = get_image(filename)
    for count, pixel in enumerate(image.get_pixels()):
        ...

here you have more information about context managers if you want to solve your problem this way:

https://book.pythontips.com/en/latest/context_managers.html

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.