关于opencv的安装包
https://www.lfd.uci.edu/\~gohlke/pythonlibs/#opencv
机器人相关视频
http://i.youku.com/u/UMTkxNDMxNDkxNg==
机器人历史及机器人应用_1
空间描述,广义坐标_2
[第3集] 东芝公司开发的柔性致动器
机器人"蜂鸟"_4
灵长类仿生机器人_5
[第6集] 瞬态运动学
[第7集] 雅可比矩阵显式
[第8集] 沙因曼机械臂
[第9集] 客座讲座:立体视觉
[第10集] 客座讲座:轨迹生成
关节空间动力学 11
[第12集] 拉格朗日方程
[第13集] 控制学综述
PD控制_14
机械臂控制 15
顺应性 16
这个视频是斯坦福大学08年的,关于一些原理,比较经典。
国内关于机器人相关的实体可编程网站,个人觉得比较好
https://www.yahboom.com/study/Omniduino
1、利用python进行识别相似图片(二)
https://segmentfault.com/a/1190000004500523
2、OpenCV-Python,计算机视觉开发利器 包括了:添加文字、图像处理、二值化,轮廓提取、灰度
模仿名画、人脸检测、姿态识别、风格迁移
# coding:utf-8
import cv2
# 加载模型
net = cv2.dnn.readNetFromTorch('the_scream.t7')
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
# 读取图片
image = cv2.imread('test.jpg')
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 1.0, (w, h), (103.939, 116.779, 123.680), swapRB=False, crop=False)
# 进行计算
net.setInput(blob)
out = net.forward()
out = out.reshape(3, out.shape[2], out.shape[3])
out[0] += 103.939
out[1] += 116.779
out[2] += 123.68
out /= 255
out = out.transpose(1, 2, 0)
# 输出图片
cv2.imshow('Styled image', out)
cv2.waitKey(0)
# coding:utf-8
import cv2
import numpy
# pip install opencv-python
# pip install numpy
def oilPainting(img, templateSize, bucketSize, step): # templateSize模板大小,bucketSize桶阵列,step模板滑动步长
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
gray = ((gray / 256) * bucketSize).astype(int) # 灰度图在桶中的所属分区
h, w = img.shape[:2]
oilImg = numpy.zeros(img.shape, numpy.uint8) # 用来存放过滤图像
for i in range(0, h, step):
top = i - templateSize
bottom = i + templateSize + 1
if top < 0:
top = 0
if bottom >= h:
bottom = h - 1
for j in range(0, w, step):
left = j - templateSize
right = j + templateSize + 1
if left < 0:
left = 0
if right >= w:
right = w - 1
# 灰度等级统计
buckets = numpy.zeros(bucketSize, numpy.uint8) # 桶阵列,统计在各个桶中的灰度个数
bucketsMean = [0, 0, 0] # 对像素最多的桶,求其桶中所有像素的三通道颜色均值
# 对模板进行遍历
for c in range(top, bottom):
for r in range(left, right):
buckets[gray[c, r]] += 1 # 模板内的像素依次投入到相应的桶中,有点像灰度直方图
maxBucket = numpy.max(buckets) # 找出像素最多的桶以及它的索引
maxBucketIndex = numpy.argmax(buckets)
for c in range(top, bottom):
for r in range(left, right):
if gray[c, r] == maxBucketIndex:
bucketsMean += img[c, r]
bucketsMean = (bucketsMean / maxBucket).astype(int) # 三通道颜色均值
# 油画图
for m in range(step):
for n in range(step):
oilImg[m + i, n + j] = (bucketsMean[0], bucketsMean[1], bucketsMean[2])
return oilImg
import os
os.chdir(r'C:\Users\Desktop\pic')
img = cv2.imread('20200108102403.jpg', cv2.IMREAD_ANYCOLOR)
oil = oilPainting(img, 4, 8, 2)
cv2.imshow('youhua', oil)
cv2.imwrite(r'myyouhua.jpg', oil)
https://segmentfault.com/a/1190000017026871
将图片进行素描的形式展示运行时间慢
# -*- coding: utf-8 -*-
from PIL import Image
from random import randint
old = Image.open(r"C:\Users\Desktop\pic\飞人.png")
new = Image.new('L', old.size, 255)
w, d = old.size
old = old.convert('L')
PEN_SIZE = 3
COLOR_DIFF = 7
LINE_LEN = 2
for i in range(PEN_SIZE + 1, w - PEN_SIZE - 1):
for j in range(PEN_SIZE + 1, d - PEN_SIZE - 1):
originalcolor = 255
lcolor = sum([old.getpixel((i - r, j))
for r in range(PEN_SIZE)]) // PEN_SIZE
rcolor = sum([old.getpixel((i + r, j))
for r in range(PEN_SIZE)]) // PEN_SIZE
if abs(lcolor - rcolor) > COLOR_DIFF:
originalcolor -= (255 - old.getpixel((i, j))) // 4
for p in range(-LINE_LEN + randint(-1, 1), LINE_LEN + randint(-1, 1)):
new.putpixel((i, j + p), originalcolor)
ucolor = sum([old.getpixel((i, j - r))
for r in range(PEN_SIZE)]) // PEN_SIZE
dcolor = sum([old.getpixel((i, j + r))
for r in range(PEN_SIZE)]) // PEN_SIZE
if abs(ucolor - dcolor) > COLOR_DIFF:
originalcolor -= (255 - old.getpixel((i, j))) // 4
for p in range(-LINE_LEN + randint(-1, 1), LINE_LEN + randint(-1, 1)):
new.putpixel((i + p, j), originalcolor)
lucolor = sum([old.getpixel((i - r, j - r))
for r in range(PEN_SIZE)]) // PEN_SIZE
rdcolor = sum([old.getpixel((i + r, j + r))
for r in range(PEN_SIZE)]) // PEN_SIZE
if abs(lucolor - rdcolor) > COLOR_DIFF:
originalcolor -= (255 - old.getpixel((i, j))) // 4
for p in range(-LINE_LEN + randint(-1, 1), LINE_LEN + randint(-1, 1)):
new.putpixel((i - p, j + p), originalcolor)
rucolor = sum([old.getpixel((i + r, j - r))
for r in range(PEN_SIZE)]) // PEN_SIZE
ldcolor = sum([old.getpixel((i - r, j + r))
for r in range(PEN_SIZE)]) // PEN_SIZE
if abs(rucolor - ldcolor) > COLOR_DIFF:
originalcolor -= (255 - old.getpixel((i, j))) // 4
for p in range(-LINE_LEN + randint(-1, 1), LINE_LEN + randint(-1, 1)):
new.putpixel((i + p, j + p), originalcolor)
new.save(r"pencil_drawing.jpg")
第二种办法
# -*- coding: utf-8 -*-
from PIL import Image
import numpy as np
a = np.asarray(Image.open(r'C:\Users\Desktop\pic\飞人.png').convert('L')).astype('float')
depth = 100. # (0-100)
grad = np.gradient(a) # 取图像灰度的梯度值
grad_x, grad_y = grad # 分别取横纵图像梯度值
grad_x = grad_x * depth / 100.
grad_y = grad_y * depth / 100.
A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = 1. / A
vec_el = np.pi / 2.2 # 光源的俯视角度,弧度值
vec_az = np.pi / 4. # 光源的方位角度,弧度值
dx = np.cos(vec_el) * np.cos(vec_az) # 光源对x 轴的影响
dy = np.cos(vec_el) * np.sin(vec_az) # 光源对y 轴的影响
dz = np.sin(vec_el) # 光源对z 轴的影响
b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z) # 光源归一化
b = b.clip(0, 255)
im = Image.fromarray(b.astype('uint8')) # 重构图像
im.save('new.jpg')
3、Python给照片换底色,基于opencv模块
https://segmentfault.com/a/1190000018599038?utm_source=sf-related
# coding:utf-8
import cv2
import numpy as np
import os
os.chdir(r'C:\Users\Desktop\pic')
img = cv2.imread('20200108102403.jpg')
# 缩放
rows, cols, channels = img.shape
img=cv2.resize(img, None, fx=0.5, fy=0.5)
rows, cols, channels = img.shape
cv2.imshow('img', img)
# 转换hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_blue = np.array([90,70,70])
upper_blue = np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)
# 腐蚀膨胀
erode = cv2.erode(mask, None, iterations=1)
cv2.imshow('erode', erode)
dilate = cv2.dilate(erode, None, iterations=1)
cv2.imshow('dilate', dilate)
# 遍历替换
for i in range(rows):
for j in range(cols):
if dilate[i, j] == 255:
img[i, j] = (0, 0, 255) # 此处替换颜色,为BGR通道
cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
4、利用OpenCV提取图像中的矩形区域(PPT屏幕等)
https://segmentfault.com/a/1190000013925648?utm_source=sf-related
5、在Python中使用OpenCV进行人脸检测
https://segmentfault.com/a/1190000014942043
6、opencv python 图像修复
https://segmentfault.com/a/1190000015846719?utm_source=sf-related
7、超不清视频播放器-用Python将视频转成字符
https://segmentfault.com/a/1190000017749424
# coding: utf8
import cv2 as cv
import os
import time
# 替换字符列表
ascii_char = list(r"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
char_len = len(ascii_char)
# 加载视频
cap = cv.VideoCapture('video.mp4')
while True:
# 读取视频每一帧
hasFrame, frame = cap.read()
if not hasFrame:
break
# 视频长宽
width = frame.shape[0]
height = frame.shape[1]
# 转灰度图
img_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# 缩小图片并调整长宽比
img_resize = cv.resize(img_gray, (int(width / 10), int(height / 10)))
text = ''
# 遍历图片中的像素
for row in img_resize:
for pixel in row:
# 根据像素值,选取对应的字符
text += ascii_char[int(pixel / 256 * char_len)]
text += '\n'
# 清屏
os.system('cls') # mac是'clear'
# 输出生成的字符方阵
print(text)
# 适当暂停一下
time.sleep(0.03)
8、OpenCV-Python 图像修补 | 六十
https://segmentfault.com/a/1190000022378441?utm_source=sf-related
9、Python中的十大图像处理工具
https://segmentfault.com/a/1190000021328079?utm_source=sf-related
10、OpenCV闯关记------Ubuntu16.04 OpenCV Python开发环境搭建
https://segmentfault.com/a/1190000007715243
11、树莓派入门指北 | 树莓派小无相系列
https://segmentfault.com/a/1190000013996823?utm_source=sf-related
12、树莓派3 + raspbian lite + OpenCV 3 环境搭建
https://segmentfault.com/a/1190000012940611?utm_source=sf-related
13、如何使用python+opencv识别二维码