python远程连接linux,利用opencv读图片及展示图片的简单使用

(第一次写的python为了实现某个临时的展示场景,有百度真好,0基础也不怕~)

python环境可以使用anaconda来管理

下面是windows下的一个图片展示的例子,图片从linux服务器上获取硬盘上读取,光盘中读取(当前系统-蓝光配置内部机制,当文件在光盘中时,硬盘中有映射图片,但要从光盘自动拷贝到本地才能真的读取到)

 config.ini

[config_env]
#0:硬盘,1:光盘,
fileSource = 0
#图片循环执行次数
repeatTimes = 1

[config_diskFile]
#读缓存文件的配置
#放置图片的文件夹路径
samba_username = root
samba_pwd = 0p-0p-
#images2文件在读缓存中
fileLoad = //172.16.1.88/rdfs/ykx-test/imFolder1/

[config_remoteFile]
#读光盘文件的配置
remote_ip = 172.16.1.88
remote_username = root
remote_pwd = 0p-0p-
fileReadbuffer = /rdfs_cache/readbuffer/ykx-test/r/
deleteDir = imFolder2

samba_username = root
samba_pwd = 0p-0p-
#images文件在光盘中,没在读/写缓存中,如果在读缓存中,运行win_showCDRomImages.py时会将images从读缓存清理掉
fileLoad = //172.16.1.88/rdfs/ykx-test/imFolder2/

#将文件拷贝到本地目录
destLoad = E:/images

config.py

# coding=gbk
import configparser
import os
import sys

conf = configparser.ConfigParser()
# #程序运行目录
# exeruningpath=os.path.dirname(sys.executable)
# #源码工程的父目录,即readfiles的上一级目录
# exepath = os.path.dirname(sys.path[0])
# print("程序运行路径:" + exeruningpath)
# print("工程所在目录:" +exepath)
# print("当前工作目录:" +os.getcwd())
# if os.path.exists(exepath + "\\readImages\\config\\config.ini"):
#     conf.read(exepath + "\\readImages\\config\\config.ini",encoding='UTF-8-sig')
# else:
#     #将config.ini与打包出来的exe文件放在同个目录,打包命令:pyinstaller -F main.py
#     conf.read(exeruningpath + "\\config.ini",encoding='UTF-8-sig')

#当前工作目录
cwd = os.getcwd()
print("当前工作目录:" + cwd)

#获取config.ini文件
if os.path.exists(cwd+ "\\config\\config.ini"):
    conf.read(cwd+ "\\config\\config.ini",encoding='UTF-8-sig')
else:
    #将config.ini与打包出来的exe文件放在同个目录,打包命令:pyinstaller -F main.py
    conf.read(cwd+ "\\config.ini",encoding='UTF-8-sig')

# 调用get方法,然后获取配置的数据
fileSource = conf.get("config_env","fileSource")
repeatTimes  = conf.get("config_env","repeatTimes")

#读硬盘
samba_username = conf.get("config_diskFile" , "samba_username")
samba_pwd = conf.get("config_diskFile", "samba_pwd")
fileLoad = conf.get("config_diskFile", "fileLoad")

#读光盘
remote_ip = conf.get("config_remoteFile", "remote_ip")
remote_username = conf.get("config_remoteFile", "remote_username")
remote_pwd = conf.get("config_remoteFile", "remote_pwd")
fileReadbuffer = conf.get("config_remoteFile", "fileReadbuffer")
deleteDir = conf.get("config_remoteFile", "deleteDir")
fileLoadCDSmaba = conf.get("config_remoteFile", "fileLoad")

fileUtil.py

# coding=gbk
import sys
print(sys.path.append('..'))

import os,shutil

#获取文件夹下的图片文件
def get_images_file_name(file_dir):
    L = []
    for root, dirs, files in os.walk(file_dir):
        print("当前路径:" + root)  # 当前目录路径
        print("当前路径下所有子目录:")
        print(dirs)  # 当前路径下所有子目录
        print("当前路径下所有非目录子文件:")
        print(files)  # 当前路径下所有非目录子文件
        for file in files:
            if os.path.splitext(file)[1] == '.jpeg':
                L.append(os.path.join(root, file))
            if os.path.splitext(file)[1] == '.jpg':
                L.append(os.path.join(root, file))
            if os.path.splitext(file)[1] == '.png':
                L.append(os.path.join(root, file))
    print("前路径下所有非目录子文件完整目录:")
    print(L)  # 当前路径下所有图片
    return L


#获取文件夹下的所有文件
def get_all_file_name(file_dir):
    L = []
    for root, dirs, files in os.walk(file_dir):
        print("当前路径:" + root)  # 当前目录路径
        print("当前路径下所有子目录:")
        print(dirs)  # 当前路径下所有子目录
        print("当前路径下所有非目录子文件:")
        print(files)  # 当前路径下所有非目录子文件
        for file in files:
                L.append(os.path.join(root, file))
    print("前路径下所有非目录子文件完整目录:")
    print(L)  # 当前路径下所有非目录子文件
    return L


def deleteFile(file_dir):
    print("删除目录" + file_dir)


def mycopyfile(srcfile,dstfile):
    if not os.path.isfile(srcfile):
        print("%s not exist!"%(srcfile))
    else:
        fpath,fname=os.path.split(dstfile)    #分离文件名和路径
        if not os.path.exists(fpath):
            os.makedirs(fpath)                #创建路径
        shutil.copyfile(srcfile,dstfile)      #复制文件
        print("copy %s -> %s"%( srcfile,dstfile))

 win_showCDRomImages.py

# coding=gbk
import sys
sys.path.append('..')
import os
import time
import datetime
import cv2
import paramiko
from config import config
from fileManager import fileUtil


def readFile():
  try:
     # 创建SSHClient实例对象
     ssh = paramiko.SSHClient()
     # 调用方法,标识没有远程机器的公钥,允许访问
     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     # 连接远程机器 地址端口用户名密码
     ssh.connect(config.remote_ip,22,config.remote_username,config.remote_pwd)
     #ssh.connect("172.16.1.88", 22, "root", "0p-0p-")
     #切换到目录
     #cmd = "cd " + config.fileReadbuffer +";rm -rf " + config.deleteDir
     cmd = "rm -rf " + config.fileReadbuffer + config.deleteDir
     stdin,stdout,stderr = ssh.exec_command(cmd)
     print(stdout.read().decode("utf-8"))


     time.sleep(1)
     #从文件夹获取文件
     filepath = config.fileLoadCDSmaba
     files = []
     files = fileUtil.get_images_file_name(filepath)
     i = int(1)
     for file in files:

       #依次读取展示图片
        bool = True
        image = None

        image = cv2.imread(file)

        try:
           if image == None:
             while True:
                time.sleep(0.2)
                cmd = "find " + config.fileReadbuffer +  config.deleteDir + " -name " + os.path.basename(file) + "*"
                stdin, stdout, stderr = ssh.exec_command(cmd)
                findfile = stdout.read().decode("utf-8")

                if findfile != '':
                   print(findfile)
                   image = cv2.imread(file)
                   break

        except Exception as e:
           print("读文件异常:" + str(e))

        nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在
        print("当前时间戳:" + nowTime)
        print("光盘读取第" + str(i) + "张图片")
        #获取图片尺寸
        #x, y = image.shape[0:2]
        #图片尺寸缩小至1/2
        #im = cv2.resize(image, (int(y / 2), int(x / 2)))
        #cv2.namedWindow("CD", 0)
        #cv2.moveWindow("CD", 10, 10)
        cv2.imshow("CD", image)
        cv2.waitKey(1000)
        i = i + 1

  except Exception as e:
      print( "error info : " + str(e))

  finally:
      print("最后执行关闭连接")
      # 关闭连接
      ssh.close()

win_showHardDiskImages.py

# coding=gbk
import sys
sys.path.append('..')
import datetime
import cv2
from fileManager import fileUtil
from config import config

def readFile():

  filepath =  config.fileLoad
  files = []
  files = fileUtil.get_images_file_name(filepath)

  i = int(1)
  for file in files:
    #依次读取展示图片
    try:
       image = cv2.imread(file)
       #x, y = image.shape[0:2]
       #im = cv2.resize(image, (int(y / 2), int(x / 2)))
       #cv2.namedWindow("HD", 0)
       #cv2.moveWindow("HD", 50, 10)
       nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在
       print("当前时间戳:" + nowTime)
       print("硬盘读取第" + str(i) + "张图片")
       cv2.imshow("HD", image)
       cv2.waitKey(1000)
       i = i+ 1
    except Exception as e:
       print( "error info : " + e)

main.py

from config import config
from fileManager import win_showHardDiskImages as showHardDiskImages
from fileManager import win_showCDRomImages as showCDRomImages
import _thread

fileSource = config.fileSource


if __name__ == "__main__":
    if fileSource == '0' :
        for i in range(0, int (config.repeatTimes)):
          print("开始第" + str(i+1) + "轮")
          showHardDiskImages.readFile()
    elif fileSource == '1' :
        for i in range(0,int (config.repeatTimes)):
          print("开始第" + str(i+1) + "轮")
          showCDRomImages.readFile()
    else:
        print("请检查配置文件中的'fileSource'设置")

README.md

win10 64位下运行,依赖环境:

通过anaconda安装

python版本V3.6.8

py-opencv 3.4.2(安装此依赖时会自动选择将libopencv 3.4.2也安装了)

paramiko  2.4.2 (远程访问操作)

删除cryptography 2.7(paramiko安装时自动安装的依赖) 改为安装cryptography 2.4.2

configparser(读配置文件)

pyinstaller 3.4(打包工具)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐乐Gold

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值