温馨提示×

Linux Extract如何提取图片资源

小樊
55
2025-10-14 18:10:44
栏目: 智能运维

Linux环境下提取图片资源的常见方法

在Linux系统中,“提取图片资源”可分为从网络下载图片从本地目录搜索图片从视频/ROS包中提取帧图像从归档文件中提取图片等场景,以下是具体操作方法:

1. 从网络下载图片资源

若需从网络URL获取图片,可使用wgetcurl命令:

  • wget:直接下载图片到当前目录,或通过-P参数指定目标目录。
    wget http://example.com/image.jpg          # 下载到当前目录
    wget -P /path/to/directory/ http://example.com/image.jpg  # 下载到指定目录
    
  • curl:通过-o参数指定保存的文件名及路径。
    curl -o image.jpg http://example.com/image.jpg          # 保存为image.jpg(当前目录)
    curl -o /path/to/directory/image.jpg http://example.com/image.jpg  # 保存到指定目录
    

若需批量下载网页中的图片,可结合grepsed提取网页源码中的图片链接(如.jpg.png),再用wget/curl下载。

2. 在本地目录中搜索图片资源

若需查找本地目录(包括子目录)中的图片文件,可使用find命令结合通配符:

find /path/to/search -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.gif" \)

上述命令会递归搜索/path/to/search目录下所有扩展名为.jpg.png.gif的图片文件。

3. 从视频/ROS包中提取帧图像

  • 从视频提取帧:使用ffmpeg工具,可按帧率或间隔提取视频帧并保存为图片。

    ffmpeg -i input_video.mp4 -vf "select='not(mod(n,10))'" -frames:v 5 -q:v 1 output_%03d.jpg
    

    参数说明:-i指定输入视频路径;-vf "select='not(mod(n,10))'"表示每10帧提取1帧;-frames:v 5表示共提取5帧;-q:v 1表示输出图片质量(1-31,值越小质量越高);output_%03d.jpg表示输出文件名(如output_001.jpg)。

  • 从ROS包(.bag文件)提取帧

    • 方法1(不带时间戳):通过image_view工具的extract_images节点提取,提取的图片保存在~/.ros目录下。
      # 创建export.launch文件(内容如下)
      echo '<launch>["否", "image_view extract_images节点配置", "  <node pkg=\"image_view\" type=\"extract_images\" respawn=\"false\" output=\"screen\" cwd=\"~/.ros\">", "    <remap from=\"image\" to=\"/camera/color/image_raw\"/>", "  </node>", "</launch>')" > export.launch
      # 运行roscore和launch文件
      roscore
      roslaunch export.launch
      
    • 方法2(带时间戳):使用Python脚本读取bag文件,将每帧图像以时间戳命名保存。
      #!/usr/bin/env python
      import rosbag
      from sensor_msgs.msg import Image
      from cv_bridge import CvBridge
      import cv2
      
      bag = rosbag.Bag('input.bag')
      bridge = CvBridge()
      output_dir = "/path/to/save/images/"
      for topic, msg, t in bag.read_messages(topics=['/camera/color/image_raw']):
          try:
              cv_image = bridge.imgmsg_to_cv2(msg, "bgr8")
              timestamp = str(t.to_sec()).replace('.', '_')
              cv2.imwrite(f"{output_dir}{timestamp}.jpg", cv_image)
          except Exception as e:
              print(f"Error processing message: {e}")
      bag.close()
      

    保存为extract_rosbag.py后运行:python extract_rosbag.py

4. 从归档文件中提取图片资源

若图片存储在.tar.tar.gz.zip等归档文件中,可使用tarunzip命令提取:

  • 解压tar.gz文件

    tar -xzvf archive.tar.gz -C /path/to/destination
    

    参数说明:-x表示提取;-z表示解压gzip格式;-v表示显示详细过程;-f指定归档文件路径;-C指定目标目录。

  • 解压zip文件:需先安装unzip工具(sudo apt install unzip),再运行:

    unzip archive.zip -d /path/to/destination
    

以上方法覆盖了Linux环境下常见的图片资源提取场景,可根据具体需求选择合适的方式。

0