May I suggest just checking the vertical position of the player for this case? If collision with a ground plane is intended. If you mean some kind of collision with features of the image, then it’s another story. You will have to be more specific on the representation and needs in that case.
For example: If a tile represents either grass or stone, you could do collision detection on “tile type”, but if a tile contains grass and stone, you may need collision detection on image content, which is significantly more demanding.
I am working on something a bit similar for the time being (with partial success). In my case I have a height map, represented by an array. I decide a threshold value for collision (~the draft of a ship), and generate a corresponding Quadtree from the grid. Then I consider the object axis-aligned bounding rectangle of the ship and intersect it recursively against the quadtree using the separating axis theorem, see math - How to check intersection between 2 rotated rectangles? - Stack Overflow for a bunch of different implementations.
I cannot help you with the details. Just trying to point you in the right direction.
Anyway, just an idea: why not use underlying map of collision for each tile? Like, one half of a tile is grass, the other one is stone (a wall), then underlying map will be half white (possible to move), half black (impossible to move), so if you know position of the sprite on the tile, check the respective collision map for the tile.