Opencv操作相关内容记录

devtools/2025/2/12 23:04:15/

关于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 - templateSizebottom = i + templateSize + 1if top < 0:top = 0if bottom >= h:bottom = h - 1for j in range(0, w, step):left = j - templateSizeright = j + templateSize + 1if left < 0:left = 0if 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 oilImgimport 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 randintold = 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 = 2for i in range(PEN_SIZE + 1, w - PEN_SIZE - 1):for j in range(PEN_SIZE + 1, d - PEN_SIZE - 1):originalcolor = 255lcolor = sum([old.getpixel((i - r, j))for r in range(PEN_SIZE)]) // PEN_SIZErcolor = sum([old.getpixel((i + r, j))for r in range(PEN_SIZE)]) // PEN_SIZEif abs(lcolor - rcolor) > COLOR_DIFF:originalcolor -= (255 - old.getpixel((i, j))) // 4for 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_SIZEdcolor = sum([old.getpixel((i, j + r))for r in range(PEN_SIZE)]) // PEN_SIZEif abs(ucolor - dcolor) > COLOR_DIFF:originalcolor -= (255 - old.getpixel((i, j))) // 4for 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_SIZErdcolor = sum([old.getpixel((i + r, j + r))for r in range(PEN_SIZE)]) // PEN_SIZEif abs(lucolor - rdcolor) > COLOR_DIFF:originalcolor -= (255 - old.getpixel((i, j))) // 4for 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_SIZEldcolor = sum([old.getpixel((i - r, j + r))for r in range(PEN_SIZE)]) // PEN_SIZEif abs(rucolor - ldcolor) > COLOR_DIFF:originalcolor -= (255 - old.getpixel((i, j))) // 4for 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 npa = 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 osos.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识别二维码
https://segmentfault.com/a/1190000020885650


http://www.ppmy.cn/devtools/157621.html

相关文章

07苍穹外卖之redis缓存商品、购物车(redis案例缓存实现)

课程内容 缓存菜品 缓存套餐 添加购物车 查看购物车 清空购物车 功能实现&#xff1a;缓存商品、购物车 效果图&#xff1a; 1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压…

使用rustDesk搭建私有远程桌面

一、rustDesk官方网站 RustDesk – 开源远程桌面访问软件 二、下载地址 客户端&#xff1a;https://github.com/rustdesk/rustdesk/releases/tag/1.2.7 服务端&#xff1a;https://github.com/rustdesk/rustdesk-server/releases/tag/1.1.11-1 三、服务端安装&#xff08;…

css实现长尾箭头(夹角小于45度的)

1. 长尾夹角小于45度的箭头 代码 //h5<div class"singleArrow"></div>//css .singleArrow {width: 150px;height: 1px;position: relative;background-color: #15ff00;/* transform: rotate(-40deg); */ /* 旋转角度 */}.singleArrow::after{ // 成品-有…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…

2024 Rust现代实用教程:1.1Rust简介与安装更新

文章目录 一、Rust安装二、更新Rust三、Rust的Stable与Nightly版本四、卸载ubuntu安装的cargo和rustup五、rust源设置六、rust交叉编译工具链说明 rustup稳定版交叉编译步骤 步骤 1&#xff1a;安装目标组件步骤 2&#xff1a;安装交叉编译工具链步骤 3&#xff1a;配置环境变…

【c++】多态中的构造函数和析构函数

【c】多态中的构造函数和析构函数 一、构造函数 1. 构造函数的核心任务 1.1构造函数负责 初始化对象的成员变量 和 设置虚表指针&#xff08;vptr&#xff09;。 虚表指针&#xff08;vptr&#xff09;&#xff1a;当一个类包含虚函数时&#xff0c;编译器会隐式地为该类的…

使用Redis解决使用Session登录带来的共享问题

在学习项目的过程中遇到了使用Session实现登录功能所带来的共享问题&#xff0c;此问题可以使用Redis来解决&#xff0c;也即是加上一层来解决问题。 接下来介绍一些Session的相关内容并且采用Session实现登录功能&#xff08;并附上代码&#xff09;&#xff0c;进行分析其存在…

Yolo图片标注的一些问题

1.标注工具的选择 在img.net和瑞芯微的双重加持下&#xff0c;现在的计算机视觉识别已经在各行业快速推进。进行自行标注时&#xff0c;首先遇到的问题就是标注工具的选择问题&#xff0c;标注作业不需要自己手工完成——也没有必要。类似这样的通用需求&#xff0c;交给专业…