pencv返回镜像 python_Python 给openCV走一个(一)

先自己吹一波

鄙人,Python爱好者一枚,准备花半个学期搞一搞opencv,之前玩的时候多有涉及,这次准备认真搞搞

鄙人尽量少说废话,说的有意思一点

尽量将出处,参考文献标上

前奏

这准备搞,得有点儿资料吧,正好老师给了个链接......不过,那个某度网盘的链接是照片版的

开始我也没在意,多次输入链接发现,总是页面不存在,后来想起,我和同学发生过I 1 l尴尬,就是数字1,小写L和大写i傻傻分不清

行吧,I、l和1一共出现了4次而已,写个爬虫搞搞

import requests as r

headers={"User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",

"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Connection" : "keep-alive",

"Accept-Charset" : "GB2312,utf-8;q=0.7,*;q=0.7"}

link = 'xxxxxxx' # 这是个错误的网址

respon = r.get(link, headers=headers)

respon.encoding = 'utf-8' # 改下编码

print(respon.text[:500])

简单在 spyder中尝试代码,我发现:

这只小黄鸡返回的页面中有一个字符串:页面不存在

这我就太高兴了,正常的链接页面一般不会有这个8,随便找了一个正常的某度网盘下载链接试了一下没有(大家可以自己试试)

于是,思路是,将I、l和1在某度网盘链接中不断更换位置,并持续请求返回 text,若字符串'页面不存在'不存在,那就是这个连接了

代码如下:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

Created on Mon Sep 16 16:01:41 2019

@author: Ryan

"""

import requests as r

import numpy as np

headers={"User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",

"Connection" : "keep-alive",

}

raw_link = 'https://pan.baidu.com/s/1GvlYt6aFtXXXXXXDX1OQ'

iL1 = ['I', 'l', '1']

def get_iL1_index(link, iL1_list):

# 得到连接中 1iL 的位置

# iL1 list

# iL1 = ['I', 'L', '1'] 只为解耦合

iL1 = iL1_list

# iL1 在 link字符串中的位置

index_list = []

# 用一个技巧

raw_link_array = np.array(list(link)) # 转换为 np.array

for x in iL1:

# 找寻 iL1 的位置, 并添加到 index_list

index_list.append( np.where(raw_link_array == x)[0] )

# 转换

index_array = np.concatenate(index_list, axis=0)

return index_array

def decimal_return(num_len, candidates):

'''

某进制候选产生函数

num_len : 进制位数

candidates : 候选列表, 元素类别为 str

返回所有 str 列表

'''

counter_array = np.zeros(shape=(num_len), dtype=np.int64) # 注意此处必须为 int 类型

candidates_copy = candidates.copy() # 克隆候选列表

str_need = ''

candidates_len = len(candidates)

str_need_list = []

while(1):

for index in range(num_len):

str_need += candidates_copy[ counter_array[index] ]

counter_array[0] += 1

if counter_array[0] == candidates_len:

for x in range(num_len):

if counter_array[x] == candidates_len:

counter_array[x+1] += 1

counter_array[counter_array == candidates_len] = 0 # 整体清零

counter_array[0] = 0

str_need_list.append( str_need )

str_need = ''

if np.sum(counter_array) == num_len * (len(candidates) - 1):

# 此处手动添加, 差一次(此处可能有 )

str_need_list.append( num_len*candidates[-1] )

break

return str_need_list

raw_link_list = np.array(list(raw_link)) # 将链接字符串转化为 list

iL1_index = get_iL1_index(raw_link, iL1) # 找到链接中 iL1 中的位置

replace_list = decimal_return(len(iL1_index), iL1)

for index, replace_str in enumerate(replace_list):

raw_link_list[iL1_index] = list(replace_str)

link = ''.join(raw_link_list)

link_respo = r.get(link, headers=headers)

link_respo.encoding = 'utf-8'

if '页面不存在' in link_respo.text:

print(index, link, '文件不存在\n')

elif '你来晚了' in link_respo.text:

print(index, link, '文件被取消\n')

else:

print(index, link,'成功\n')

行吧,这才找到了下载链接,下就完事了……

环境搭建

一说环境搭建,咱都知道anaconda全家桶,今儿常常新鲜事物miniconda,要说几个conda的区别,我参考了这篇博客

conda是一种通用包管理系统,旨在构建和管理任何语言和任何类型的软件。举个例子:包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。

Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,就是把很多常用的不常用的库都给你装好了。

Miniconda,顾名思义,它只包含最基本的内容——python与conda,以及相关的必须依赖项,对于空间要求严格的用户,Miniconda是一种选择。就只包含最基本的东西,其他的库得自己装。

这儿有关于三者更深的讨论

一顿傻瓜式默认操作,装完了.....

接下来装包吧:

什么numpy、scipy、matplotlib统统装上,推荐用conda装

咱重点不在环境搭建哈,简单操作就不多说了

这里有一个关于安装openCV的坑:

安装openCV contrib指北

顺便放几条指令:

conda update --all # 更新 miniconda

conda list # 列出安装的所有应用包

conda install # 安装应用包

conda update # 升级应用包

conda create -n venv python=3.7 # 创建新环境 Python版本为3.7,名字为venv

conda activate venv # 进入 conda 虚拟环境

conda deactivate # 退出 conda 虚拟环境

conda remove -n yourenvname --all # 删除你这个环境

知道这么几条应该够使了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值