文章目录

  • 拍照
  • 颜色识别
    • 尝试的时候一些笔记(忽略就好)
  • 获取HSV阈值
  • 鼠标点击,获取图片中点击点坐标

拍照

要先在此 .py 目录下创建picture文件夹

# created by chw 2022/3
# s 保存,q退出import cv2cap = cv2.VideoCapture(0)
flag = cap.isOpened()
cv2.namedWindow("Capture",cv2.WINDOW_AUTOSIZE)if __name__ == '__main__':index = 1while flag:ret, frame = cap.read()if ret:cv2.imshow("Capture", frame)key = cv2.waitKey(1) & 0xffif key == ord('s'):print(index)cv2.imwrite("./picture/" + str(index) + ".jpg", frame)index += 1elif key == ord('q'):breakcap.release()cv2.destroyAllWindows()

颜色识别

import cv2
import numpy as npball_color = 'green'color_dist = {'red': {'Lower': np.array([0, 60, 60]), 'Upper': np.array([6, 255, 255])},'blue': {'Lower': np.array([100, 80, 46]), 'Upper': np.array([124, 255, 255])},'green': {'Lower': np.array([35, 43, 35]), 'Upper': np.array([90, 255, 255])},
}cap = cv2.VideoCapture(0)
cv2.namedWindow('camera', cv2.WINDOW_AUTOSIZE)while cap.isOpened():ret, frame = cap.read()if ret:if frame is not None:gs_frame = cv2.GaussianBlur(frame, (5, 5), 0)  # 高斯模糊hsv = cv2.cvtColor(gs_frame, cv2.COLOR_BGR2HSV)  # 转化成 HSV 图像kernel = np.ones((5, 5), np.uint8)erode_hsv = cv2.erode(hsv, kernel, iterations=2)inRange_hsv = cv2.inRange(erode_hsv, color_dist[ball_color]['Lower'], color_dist[ball_color]['Upper'])cnts = cv2.findContours(inRange_hsv.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]if cnts:c = max(cnts, key=cv2.contourArea)"""cv2.minAreaRect()返回一个Box2D结构rect(最小外接矩形的中心(x, y),(宽度,高度), 旋转角度))分别对应于返回值(rect[0][0],rect[0][1]),(rect[1][0],rect[1][1]),rect[2]"""rect = cv2.minAreaRect(c)"""cv2.boxPoints()可获取该矩形的四个顶点坐标,浮点型"""box = cv2.boxPoints(rect)# 获取四个顶点坐标rect = np.zeros((4, 2), dtype="float32")# 按顺序找到对应坐标0123 分别是左上、右上、右下、左下# 计算左上和右下s = box.sum(axis=1)rect[0] = box[np.argmin(s)]rect[2] = box[np.argmax(s)]# 计算右上和左下diff = np.diff(box, axis=1)rect[1] = box[np.argmin(diff)]rect[3] = box[np.argmax(diff)]cv2.drawContours(frame, [np.int0(box)], -1, (0, 255, 255), 2)cv2.imshow('camera', frame)cv2.waitKey(1)else:print("无画面")else:print("无法读取摄像头!")cap.release()
cv2.waitKey(0)
cv2.destroyAllWindows()

尝试的时候一些笔记(忽略就好)

numpy.where()的用法
一:
np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y
二:
np.where(condition)
只有条件(condition),没有x和y,则输出满足条件(即非0)元素的坐标

Python中列表和数组读取一列的方法

获取HSV阈值

上面颜色识别的时候,需要知道被识别物体的HSV阈值。
当然你可以上网找,不过最适合当前环境的,当然是手动滑出来一个。

先用拍照中介绍的代码,将所要识别的物体拍照保存下来。再用cv2.imread()读取图片,拉取获得HSV阈值。

# 确定hsv颜色的最佳阈值
import cv2
import numpy as npdef nothing(x):pass# 创建一个窗口图片
cv2.namedWindow('image')# 对颜色变化创建轨迹兰
cv2.createTrackbar('HMin', 'image', 0, 179, nothing)  # Hue is from 0-179 for Opencv
cv2.createTrackbar('SMin', 'image', 0, 255, nothing)
cv2.createTrackbar('VMin', 'image', 0, 255, nothing)
cv2.createTrackbar('HMax', 'image', 0, 179, nothing)
cv2.createTrackbar('SMax', 'image', 0, 255, nothing)
cv2.createTrackbar('VMax', 'image', 0, 255, nothing)# 设置默认HSV空间的最大值
cv2.setTrackbarPos('HMax', 'image', 179)
cv2.setTrackbarPos('SMax', 'image', 255)
cv2.setTrackbarPos('VMax', 'image', 255)# 初始化HSV空间最大、最小值
hMin = sMin = vMin = hMax = sMax = vMax = 0
phMin = psMin = pvMin = phMax = psMax = pvMax = 0img = cv2.imread('./picture/1.jpg')
output = img
waitTime = 33while 1:# 获取轨迹栏的当前位置hMin = cv2.getTrackbarPos('HMin', 'image')sMin = cv2.getTrackbarPos('SMin', 'image')vMin = cv2.getTrackbarPos('VMin', 'image')hMax = cv2.getTrackbarPos('HMax', 'image')sMax = cv2.getTrackbarPos('SMax', 'image')vMax = cv2.getTrackbarPos('VMax', 'image')# 设置显示的HSV最大最小值lower = np.array([hMin, sMin, vMin])upper = np.array([hMax, sMax, vMax])# 创建HSV图像,并根据最低、最高阈值进行阈值化hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)mask = cv2.inRange(hsv, lower, upper)output = cv2.bitwise_and(img, img, mask=mask)# 展示是否HSV值有变化if (phMin != hMin) | (psMin != sMin) | (pvMin != vMin) | (phMax != hMax) | (psMax != sMax) | (pvMax != vMax):print("(hMin = %d , sMin = %d, vMin = %d), (hMax = %d , sMax = %d, vMax = %d)" % (hMin, sMin, vMin, hMax, sMax, vMax))phMin = hMinpsMin = sMinpvMin = vMinphMax = hMaxpsMax = sMaxpvMax = vMax# 展示输出图像cv2.imshow('image', output)# 等待33毫秒或者按下q键退出循环if cv2.waitKey(waitTime) & 0xFF == ord('q'):breakcv2.destroyAllWindows()

鼠标点击,获取图片中点击点坐标

还是先要将图片拍照保存,再用cv2.imread()函数读取。

import cv2img = cv2.imread('./picture/1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)def mouse_click(event, x, y, flags, para):if event == cv2.EVENT_LBUTTONDOWN:  # 左边鼠标点击print('PIX:', x, y)print("BGR:", img[y, x])print("GRAY:", gray[y, x])print("HSV:", hsv[y, x])if __name__ == '__main__':cv2.namedWindow("img")cv2.setMouseCallback("img", mouse_click)while True:cv2.imshow('img', img)if cv2.waitKey() == ord('q'):breakcv2.destroyAllWindows()

Opncv 实现拍照、颜色识别和阈值选取相关推荐

  1. 颜色识别opencv+trackbar调节目标颜色hsv的阈值

    颜色识别opencv+trackbar调节目标颜色hsv的阈值 颜色识别,trackbar调节颜色阈值 #include <iostream> #include "opencv2 ...

  2. 基于openMV的颜色识别

    基于openMV的颜色识别 openMV简介 OpenMV是一个可编程的摄像头,通过Python语言可实现你想要的逻辑.而且摄像头本身也内置了一些图像处理的算法,使用起来也更加的方便,仅需要写一些简单 ...

  3. Halcon——颜色识别提取

    文章目录 前言 一.颜色识别原理 二.颜色识别为什么将其转换至HSV颜色空间 三.源代码 写在最后 前言 [Halcon]颜色识别提取 这里以嘉庚建筑风格为例~ 一.颜色识别原理 载入图像后,将其转换 ...

  4. android opencv颜色识别,opencv学习(2)-简单颜色识别并跟踪

    本次来我们用opencv来实现识别跟踪蓝色物体并返回位置坐标的功能. 该功能分为两部分,识别颜色,跟踪颜色. 要想实现颜色的识别,我们要打开摄像头,读取捕获的图像.将图像的颜色通道转化为HSV,设置选 ...

  5. 树莓派摄像头运用python颜色识别

    运用摄像头拍照 import cv2 import osoutput_dir ='/home/pi/Desktop/py' i = 1 cap = cv2.VideoCapture(0) while ...

  6. [OpenCV]颜色识别

    颜色识别作为电赛中图像处理方面最常用的算法,应用非常广泛. 处理的流程:预处理  ->滤波->  二值化  ->  (膨胀->  )腐蚀 ->  寻找轮廓 一.预处理 将 ...

  7. OpenCV形状颜色识别Java,Android

    纯java代码实现安卓的CV识别图形形状颜色 半年前开的帖,一直在忙 回来更新下. cv环境已经没有了,图就用以前的吧,代码我贴出来,凭记忆解释一下,算法实现的,我会说明逻辑 首先,环境是OpenCV ...

  8. 【OpenMv】颜色识别

    一.颜色识别 # 色块监测 例子 # # 这个例子展示了如何通过find_blobs()函数来查找图像中的色块 # 这个例子查找的颜色是深绿色import sensor, image, time# 颜 ...

  9. python打开是什么颜色-python实现简单颜色识别程序

    本文实例为大家分享了python实现简单颜色识别程序的具体代码,供大家参考,具体内容如下 import numpy as np import cv2 font= cv2.FONT_HERSHEY_SI ...

最新文章

  1. 在列表显示某个内容,但数据表没有这个字段
  2. 用c语言编写心里测试,求各位大神赐教!我做了一个“心理测试的答题卷”编程,总共有1...
  3. 普林斯顿计算机科学系,普林斯顿大学计算机科学系
  4. Python数据结构与算法—队列
  5. java 之 继承 super关键籽 this关键字 final关键字
  6. 在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍
  7. 也谈1+2+3+...+n的解答
  8. MATLAB读取一张RGB图片转成YUV格式
  9. Food Buying CodeForces - 1296B
  10. Centos7 yum 安装 oracle-rdbms-server-11gR2-pre
  11. java 之 单例模式(大话设计模式)
  12. C语言中变量的静态分配(Static)和动态分配(StackHeap)
  13. python 相关系数矩阵可视化_python seaborn heatmap可视化相关性矩阵实例
  14. mysql 端口关闭了_关闭MySQL的3306端口
  15. 跟着团子学SAP:售前项目、项目前期管理思路
  16. 如何调试Hola Studio
  17. 【数据可视化笔记】如何选择图表?
  18. 什么是winpe,winpe系统有什么作用?
  19. 杂项-一张图片和爆破一
  20. 【算法和数据结构】模拟和暴力

热门文章

  1. 华为平板鸿蒙发布,华为新款平板与P50一同发布!有望搭载鸿蒙系统
  2. 北师大珠海分校2017国庆欢乐赛题解
  3. matlab限幅滤波法,几种常用的滤波方法
  4. Win10安装安卓模拟器入坑记
  5. 洛谷 魔法少女 python
  6. Tableau使用笔记
  7. NIPS大会最精彩一日:AlphaZero遭受质疑;史上第一场正式辩论与LeCun激情抗辩;元学习强化学习亮点复盘...
  8. Linux 配置git同步GitHub代码
  9. 电影类网站如何选择服务器
  10. 民间秘方是一个老中医几十年的心血