简体   繁体   中英

Image plotted by plt.imshow() is inverted while same image by cv2_imshow() is fine, how do I know what my neural net gets?

Here is my snippet for both of them

from google.colab.patches import cv2_imshow 
import cv2 
pt = '/content/content/DATA/testing_data/1/126056495_AO_BIZ-0000320943-Process_IP_Cheque_page-0001.jpg' #@param
img = cv2.imread(pt) 
cv2_imshow(img) 

and here is the other one

import matplotlib.image as mpimg

pt = '/content/content/DATA/testing_data/1/126056495_AO_BIZ-0000320943-Process_IP_Cheque_page-0001.jpg'
image = mpimg.imread(pt)
plt.imshow(image)

Now, the image in second case is inverted and image on my system is upright

What I am mostly afraid of is, if my ML model is consuming inverted image, that is probably messing with my accuracy. What could possibly be the reason to It and how do I fix it

(ps: I cannot share the pictures unfortunately, as they are confidential ) (Run on google colab) All the help is appreciated

Your picture is upside-down when you use one method for reading, and upright when you use the other method?

You use two different methods to read the image file:

  • OpenCV cv.imread()
  • Mediapipe mpimg.imread()

They behave differently. OpenCV's imread() respects file metadata and rotates the image as instructed. Mediapipe's function does not.

Solution: Stick to OpenCV's imread() . Don't use Mediapipe's function.


The issue is not with matplotlib . When plt.imshow() is called, it presents the image with an origin in the top left corner, ie the Y-axis grows downward. That corresponds to how cv.imshow() behaves.

If your plot does have an Y-axis growing upwards, causing the image to stand upside-down, then you must have set this plot up in specific ways that aren't presented in your question.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM