我正在学习OpenCV和Python。我从我的网络摄像头中捕获了一些图像并保存了下来。但是它们默认保存在本地文件夹中。我想将它们保存到另一个直接路径的文件夹中。我该怎么做?
我正在学习OpenCV和Python。我从我的网络摄像头中捕获了一些图像并保存了下来。但是它们默认保存在本地文件夹中。我想将它们保存到另一个直接路径的文件夹中。我该怎么做?
ebeneditos提供的解决方案完美运作。
但是,如果您在大段代码片段的几个部分中都有cv2.imwrite()
,并且您想更改保存图像的路径,则必须逐个更改每个cv2.imwrite()
的路径。
正如Soltius所述,这里有一种更好的方式。声明一个路径,并将其作为字符串传递到cv2.imwrite()
中。
import cv2
import os
img = cv2.imread('1.jpg', 1)
path = 'D:/OpenCV/Scripts/Images'
cv2.imwrite(os.path.join(path , 'waka.jpg'), img)
cv2.waitKey(0)
现在,如果你想修改路径,只需更改path
变量即可。
根据Kallz提供的解决方案进行编辑。
你可以使用OpenCV的函数imwrite
来完成:
import cv2
cv2.imwrite('Path/Image.jpg', image_name)
Jeru Luke提供的答案只适用于Windows系统,如果我们在其他操作系统(如Ubuntu)上尝试,则不会出现错误,但图像将保存在目标位置或路径上。
import cv2
img = cv2.imread('1.jpg', 1)
path = '/tmp'
cv2.imwrite(str(path) + 'waka.jpg',img)
cv2.waitKey(0)
import os
final_path = os.path.join(path_1,path_2,path_3......)
import cv2
import os
img = cv2.imread('1.jpg', 1)
path = 'D:/OpenCV/Scripts/Images'
cv2.imwrite(os.path.join(path , 'waka.jpg'),img)
cv2.waitKey(0)
那段代码在Windows和Ubuntu上都可以正常工作 :)
谢谢大家。你们的方法都很好。我想分享另一种解决问题的方法。我使用了 os.chdir(path)
函数来将本地目录更改为路径。之后我正常保存了图片。
cv2.imwrite("C:\\path\\where you\\want to save\\frame%d.jpg" % count, image)
图像将以名称行保存在文件夹中:frame0.jpg
,frame1.jpg
,frame2.jpg
等。
成功了!简单的修复。你只需要在目录中预先设置好空文件夹,它就可以将图像写入其中。
这是一种更明显的方法,使用简单的f'string'
,而不是os.join
- 加上一些额外的功能:
import cv2
img = cv2.imread('yourfile.jpg')
path = 'C:/OpenCV/Scripts/Images'
name = '/epic_img_title.jpg'
# write the file
cv2.imwrirte(f'{path}{name}', img)
f字符串非常简洁易懂。此外,您可以随时更改格式化的变量,非常方便!
如果您要保存大量图像并想迭代每个图像的名称:
import cv2
img = cv2.imread('yourfile.jpg')
def save_my_img(frame_count, img):
path = 'C:/OpenCV/Scripts/Images'
name = f'/img_title_{frame_count}.jpg'
cv2.imwrite(os.path.join(path, name), img)
# give it a call
save_my_img(1, img)
稍后再拉取它...
def read_saved_img(frame_count):
path = 'C:/OpenCV/Scripts/Images'
name = f'/img_title_{frame_count}.jpg'
img = cv2.imread(f'{path}{name}')
# img is now an array, so let's just return it
return img
# give it a call
cv2_image_array = read_saved_img(1)
# random variable 'cv2_image_array' to hold
# the array that was returned. Now you can
# edit it like any other image you cv2.imread()
foo = "bar\foo"
,然后查看 foo
的值。您需要手动转义它们或使用原始字符串文字。其次,这不是非常跨平台的。如果不小心,您可能会得到双反斜杠或没有反斜杠。有一个原因,像 os.path.join
和 pathlib
这样的东西存在:创建路径比大多数人预期的要棘手。正确通常比简单更重要。 - Chrisos.path
和pathlib
存在很好的理由。轻率地忽略它们是幼稚的。使用字符串而不是内置模块也可能存在_安全_问题。想象一下,您想将用户输入限制为相对于给定路径,因此执行类似于if not user_input.startswith("/some/safe/path")...
的安全措施。那么,如果用户输入/some/safe/path/../../../root
会怎样呢?标准库中的模块可以轻松解决这个问题。 - Chris如果您是Mac用户并且正在使用OpenCV
import cv2
cv2.imwrite('path_to_folder/image.jpg',image)
imwrite
时将会像什么都没有发生一样。 - nbro