for f, tags in tqdm(df_test.values, miniters=1000):
img = cv2.imread('input/test-jpg/{}.jpg'.format(f), -1)
x_test.append(cv2.resize(img, (img_size, img_size)))
x_test = np.array(x_test, np.float32)/255.
When i run the above code I get this error:
error: OpenCV(3.4.3)
C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:4044:
error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
but the files there are in the directory and the path is rigth
Make sure your input folder is located on the same level as your .py file. Otherwise, use abolute paths.
Also try the following to find your current working directory:
import os
os.getcwd()
check what is inside img after you do cv2.imread..
Related
I have imported the zip files for the said directories, but every time I try to visualize the images with a random number I am getting the following error:
error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
The code I use:
img = imread_collection(os.path.join(self.img_dir, self.img_IDs[i]))
#img = cv2.imread()
img = cv2.cvtColor(np.float32(img), cv2.COLOR_BGR2RGB)
The error means that you not have read the image(s).
To read an image you need to have following lines of code:
img = cv2.imread('./some path to image/image.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
Can your function read images like the standard opencv imread module?
Can you show us the content of this function?
imread_collection(os.path.join(self.img_dir, self.img_IDs[i]))
You could print the result of os.path to see if the folder is without any errors in name:
print( os.path.join(self.img_dir, self.img_IDs[i]) )
Don't forget to mount the drive:
from google.colab import drive
drive.mount('/content/drive')
I want to convert pdf to images.
I am using pdf2jpg Module for this.
But It is giving me Following Error:
[WinError 2] The system cannot find the file specified
The path Which I am giving, is correct.
This is my code:
import os
from pdf2jpg import pdf2jpg
find=os.getcwd()
i_p=r"find/k.pdf"
o_p=r"find/data"
result = pdf2jpg.convert_pdf2jpg(i_p, o_p, pages="ALL")
You are setting the input and output paths incorrectly. Assuming your input PDF is in the same directory as your script, following code should work:
i_p = os.path.join(find, "k.pdf")
o_p = os.path.join(find, "data")
When I try to run my code in PyCharm, it exits with code 0, and gives the desired output, but when I try to run it in VS Code it gives the following error:
File "c:\Users\1\Desktop\ImagetoText\ITT2.py", line 21, in <module> img = cv.cvtColor(img, cv.COLOR_BGR2RGB) cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-kh7iq4w7\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
How it is possible that the same code runs without errors or warnings relating to this line in PyCharm while not working in VS Code or directly in W10 is alien to my understanding.
Note: I have tried tweaking the path but to no avail.
Code:
from glob import glob
from io import BytesIO
import pytesseract
import cv2 as cv
from tkinter import *
import pyperclip
import os
presentItem = ImageGrab.grabclipboard()
with BytesIO() as f:
presentItem.save(f, format='PNG')
presentItem.save('tempITT' + '.png', 'PNG')
pytesseract.pytesseract.tesseract_cmd = 'C:\\Users\\1\\AppData\\Local\\Programs\\Tesseract-OCR\\tesseract.exe'
img = cv.imread(r"C:\Users\1\Desktop\ImagetoText\tempITT.png")
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
imgtext = pytesseract.image_to_string(img)
pyperclip.copy(imgtext)
os.remove(r"C:\Users\1\Desktop\ImagetoText\tempITT.png")
Firts check if you really have this image.
C:\Users\1\Desktop\ImagetoText\tempITT.png
imread doesn't show error when it can't find image but it returns None and later code run cv.cvtColor(None, cv.COLOR_BGR2RGB) which gives error with text !_src.empty()
I think all your problem starts with presentItem.save(...) because you use filename without full path - so it may save it in local folder, not in C:\Users\1\Desktop\ImagetoText, and later imread(r'C:\Users\1\Desktop\ImagetoText\...) can't find it.
You should use full path in all functions
presentItem.save(r'C:\Users\1\Desktop\ImagetoText\tempITT.png', 'PNG')
BTW:
When you have code C:\Users\1\Desktop\ImagetoText and you run it from this folder
cd C:\Users\1\Desktop\ImagetoText
python script.py
then presentItem.save("tempITT.png") saves file in this folder C:\Users\1\Desktop\ImagetoText and you have C:\Users\1\Desktop\ImagetoText\tempITT.png,
but if you run code for other folder
cd other folder
python C:\Users\1\Desktop\ImagetoText\script.py
then presentItem.save("tempITT.png") saves file in other foler you have C:\other folder\tempITT.png
And this can happend in your situation. Different tools may runs it in different way and later presentItem.save( may save file in different folder - and you should use full path in presentItem.save()
Folder in which code is executed is called Current Working Directory and you can see it using print( os.getcwd() )
I wanted to make a script that will convert images stored in a folder to video.
Here's the code:
import cv2
import numpy as np
import os
import pyautogui
import msvcrt
imageFolder = input('Please enter images folder path: ').replace(chr(34),"")
outputPath = imageFolder+'\Video.avi'
try:
images = [img for img in os.listdir(imageFolder) if img.endswith(".jpg")]
while len(images)==0:
imageFolder = input('There are no images in the directory ! Please enter images folder path: ').replace(chr(34),"")
images = [img for img in os.listdir(imageFolder) if img.endswith(".jpg")]
print('Creating recording...')
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
frame = cv2.imread(os.path.join(imageFolder, images[0]))
height, width, layers = frame.shape
frameRate = 2
video = cv2.VideoWriter(outputPath, fourcc, frameRate, (width,height))
for image in images:
print(f'{int((images.index(image)/len(images))*100)} %', end="\r")
video.write(cv2.imread(os.path.join(imageFolder, image)))
cv2.destroyAllWindows()
video.release()
decision = input('Recording has been created successfully ! Do you want to open it? [Y/N]: ')
if decision.lower() == 'y':
print('Opening file...')
os.startfile(outputPath)
except:
print(f'There was a problem with creating a recording. Check images path: {imageFolder}')
The code works fine when I'm launching that from command line, but after converting that to EXE with pyinstalller (pyinstaller -F ConvertToRecording.py) I'm getting an error like this:
[ERROR:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap.cpp (3
92) cv::VideoWriter::open VIDEOIO(CV_IMAGES): raised OpenCV exception:
OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\videoio\src\cap_images.cp
p:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the n
ame of file): C:\Users\MyUser\Documents\Test\20191018_12_45\Video.avi in function
'cv::icvExtractPattern'
Any help appreciated !
I met the same problem. Just go to your OpenCV folder (if you don't have, go here: https://opencv.org/releases/) and find the opencv_videoio_ffmpeg420_64.dll ( I am using 4.20) file. copy it and paste it to your exe direction (same folder).
Then it will work.
Use the os.path module to with paths instead of concatenating strings. This ensures a better cross-platform compatibility. See the manual for a more elaborate explanation of the module.
Using Opencv 3.1.0-dev, python 2.7.3 running through OS X terminal
I am running images through a stitching program I made and it works great. I use argparse to make it so I only have to pass a folder location and it will use all the photos in that folder to stitch. I had two test images and it worked great and made some other examples in different folders and with different numbers of images and worked but I am now running into an issue where I get this error:
img1 = cv2.resize(cv2.imread(os.path.join(path,imagesToStitch[0]),1),imageSize)
cv2.error: /Users/chrisradford/opencv/modules/imgproc/src/imgwarp.cpp:3490: error: (-215) ssize.width > 0 && ssize.height > 0 in function resize.
Here is my code:
import os
import cv2
import argparse
from StitchingMaster import Stitcher
#initalize objects
stitcher = Stitcher()
ap = argparse.ArgumentParser()
ap.add_argument("-1", "--first", required=True)
args = vars(ap.parse_args())
#Define variables
imageSize = (1800,1200) #size of image to be passed to stitcher
showMatches = False #True if wish to see matches; False otherwise
keypoints = []
descriptors = []
resultImageSize = (1200,900) #Size of final image to be displated and saved
imagesToStitch = os.listdir(args["first"]) #list of images in folder
path = os.path.abspath(args["first"]) #Folder path
#----Base Case[0-1]----#
if len(imagesToStitch) < 2:
print "Not enough images to stitch"
quit()
#----Base Case[2]----#
else:
img1 = cv2.resize(cv2.imread(os.path.join(path,imagesToStitch[0]),1),imageSize)
img2 = cv2.resize(cv2.imread(os.path.join(path,imagesToStitch[1]),1),imageSize)
#result = stitched image
(result,keypoints,descriptors) = stitcher.stitch([img1,img2],showMatches,keypoints,descriptors)
The error appears right after the
else:
img1 = cv2.resize....
I made another program that both opened the image at that location and resized it and it worked fine. Could it be the naming convention of the folder that gets messed up when I use os.path.abspath() and os.listdir()?
Any help greatly appreciated.
Upon further analysis I was able to determine that the issues was with:
os.listdir(args["first"])
This function also picks up hidden files. Since I am running on OS X it also picked up the hidden file called:
.DS_Store
To solve I created a simple for loop checker that removes any such file that started with a "." from my list.
for files in fileList:
if not files.startswith('.'):
imagesToStitch.append(files)