JohnAllen
JohnAllen

Reputation: 7521

cv2.imread fails in script, not on command line

cv2.imread("some.jpg") fails to read many different jpgs. I have checked a million different things:

  1. Run the same exact code in a terminal - reads and opens images just fine
  2. I checked version numbers of both python and cv2 - they are exactly the same:3.4.3 and 3.1.0.
  3. Used complete paths to files. No difference
  4. Images exist: I've manually opened dozens to see if there's something thing
  5. Timing: added pauses just to make sure this wasn't a timing issue.
  6. Checked to make sure the img/filename exists with print(os.path.exists(filename)) # prints True
  7. Hardcoded a file path into `img = imread("gif_pos_0pW-p-wb8U4_0.jpg") # print(img)... None
filename = random.choice(filename_list)
print("reading:", filename) # prints correct/verified jpg paths
sleep(.5)
img = cv2.imread(filename)
sleep(.3)
print(img) # none
read_image = cv2.resize(img, (IMAGE_WIDTH, IMAGE_HEIGHT), 3)

img is none and the resize line fails with: OpenCV Error: Assertion failed (ssize.area() > 0) in resize, file /home/user/opencv/modules/imgproc/src/imgwarp.cpp, line 3229

This is Ubuntu 15.1 if it matters. Any thoughts on what could be causing this?

Yes, I know this question exists elsewhere. The existing answers have not helped me. I have quadruple checked everything. There seems to be something else going on.

The weirdest part is that cv2 reads the image just fine from the command line, with the same exact python and cv2 versions.

EDIT: this is a script, so I'm just doing python3 train.py.

Upvotes: 3

Views: 1752

Answers (1)

tfv
tfv

Reputation: 6259

The script might be executed as a different user, with different privileges or at a different location than executing the code on the command line.

  • Check existence of file in the code with os.path.isfile
  • provide details on the script (language) and how you start it. Is this a cron job, or an executable file? Start the script manually from the command line and only after that works create batch jobs or call it from other scripts.
  • Can you give examples of paths?
  • Does it work trying to load one single image located in the same directory, without using random.choice?)
  • Does the code below work with the image attached? It works for me.

enter image description here

import cv2

img=cv2.imread("image.jpg")

cv2.imshow('Test',img)
if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

Upvotes: 3

Related Questions