09 OpenCV图形检测
1 轮廓描边
cv2.findContours()
函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓,以及计算出这些轮廓的各种属性,例如面积、周长、质心等。
cv2.findContours()
函数的语法如下:
contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
其中,参数含义如下:
image
:输入二值图像。mode
:轮廓检索模式。有三种可选模式:cv2.RETR_EXTERNAL
,表示只检测外部轮廓;cv2.RETR_LIST
,表示检测所有轮廓,并将它们存储在列表中;cv2.RETR_TREE
,表示检测所有轮廓,并构建轮廓的完整层次结构。method
:轮廓近似方法。有四种可选方法:cv2.CHAIN_APPROX_NONE
,表示存储所有的轮廓点;cv2.CHAIN_APPROX_SIMPLE
,表示仅存储轮廓的终点坐标;cv2.CHAIN_APPROX_TC89_L1
和cv2.CHAIN_APPROX_TC89_KCOS
,表示使用Teague的链逼近算法来压缩轮廓点。contours
:可选参数,用于存储检测到的轮廓。如果提供了该参数,则函数会将轮廓存储在该参数中。hierarchy
:可选参数,用于存储轮廓的层次结构信息。如果提供了该参数,则函数会将层次结构信息存储在该参数中。offset
:可选参数,指定检测到的轮廓点的偏移量。默认为(0, 0)
。
cv2.findContours()
函数会返回两个值:contours
和 hierarchy
。其中,contours
是一个包含所有检测到的轮廓的Python列表,每个轮廓都是由一组点构成的Numpy数组。而 hierarchy
是一个包含轮廓的层次结构信息的Numpy数组。
因为输入图像必须是二值图像,所以需要先将彩色图像转变为灰度图像,再转换为二值图像,才能输入进参数值中。
下面尝试对前面文章的主图进行描边:
import cv2 # 读入图像
img = cv2.imread('test.png') # 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 对灰度图像进行二值化处理
ret, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY) # 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 在图像上绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 1) # 显示结果
cv2.imshow('Original', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这段代码首先使用 cv2.imread()
函数读入图像,然后使用 cv2.cvtColor()
函数将该图像转换为灰度图像。接着,我们对灰度图像进行了二值化处理,并使用 cv2.findContours()
函数查找图像中的轮廓。最后使用 cv2.drawContours()
函数将所有轮廓绘制在原始图像上,并使用 cv2.imshow()
函数显示处理后的图像。
2 轮廓拟合
轮廓拟合可以将凹凸不平的轮廓以平滑曲线进行连接。常用的有矩形拟合cv2.boundingRect
和圆形拟合cv2.minEnclosingCircle
。二者都是在cv2.findContours()
的基础上进行拟合。
2.1 最小外接矩形
cv2.boundingRect()
函数可以用于计算轮廓的最小外接矩形,即将轮廓拟合到一个矩形框中,并返回该矩形框的左上角坐标以及宽度和高度。该函数的语法如下:
x, y, w, h = cv2.boundingRect(contour)
其中,contour
是一个Numpy数组,表示待计算的轮廓。函数返回的 x
和 y
分别表示最小外接矩形的左上角坐标,而 w
和 h
则分别表示矩形的宽度和高度
2.2 最小外接圆
cv2.minEnclosingCircle()
函数可以用于计算轮廓的最小外接圆,即将轮廓拟合到一个圆形中,并返回该圆的圆心坐标和半径。该函数的语法如下:
(x, y), radius = cv2.minEnclosingCircle(contour)
其中,contour
是一个Numpy数组,表示待计算的轮廓。函数返回的 (x, y)
是最小外接圆的圆心坐标,而 radius
则是圆的半径。
2.3 示例代码
import cv2 # 读入图像
img = cv2.imread('test.png') # 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 对灰度图像进行二值化处理
ret, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY) # 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 绘制最小外接矩形和最小外接圆
for contour in contours: # 计算最小外接矩形 x, y, w, h = cv2.boundingRect(contour) cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) # 计算最小外接圆 (x, y), radius = cv2.minEnclosingCircle(contour) center = (int(x), int(y)) radius = int(radius) cv2.circle(img, center, radius, (0, 255, 0), 2) # 显示结果
cv2.imshow('Original', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
最终,基本上每个文章都被画上了矩形框与圆形框。
3 凸包
OpenCV中的凸包是一个用于计算给定点集的凸包形状的函数。凸包是一个包围给定点集的最小凸多边形或凸多面体。凸多边形或凸多面体的特点是其边缘不会凹陷(可以理解为不会有大于180°的角),而是向外弯曲,使得所有点都位于其内部或边缘上。
在OpenCV中,可以使用cv2.convexHull()函数来计算给定点集的凸包。该函数接受一个点集作为输入,并返回凸包形状的点集。该函数使用的算法称为Graham-Scan算法,该算法在O(n log n)时间内计算给定点集的凸包。
示例代码如下:
import cv2 # 读入图像
img = cv2.imread('test.png') # 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 对灰度图像进行二值化处理
ret, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY) # 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 绘制凸包
for contour in contours: hull = cv2.convexHull(contour) cv2.polylines(img, [hull], True, (0, 0, 255), 2) # 显示结果
cv2.imshow('Original', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
4 Canny边缘检测
Canny边缘检测是一种广泛使用的方法,用于检测图像中的边缘。在OpenCV中,可以使用cv2.Canny()函数来执行Canny边缘检测。
cv2.Canny()函数使用以下步骤来检测图像中的边缘:
- 降噪:使用高斯滤波器对输入图像进行模糊处理,以减少图像中的噪声。
- 计算梯度:对模糊图像使用Sobel算子来计算图像中每个像素的梯度。这可以帮助识别像素值变化最剧烈的位置,即可能的边缘。
- 非极大值抑制:在图像中沿着梯度方向找到局部最大值,将它们保留为可能的边缘点,而抑制其他非最大值的像素点。
- 双阈值检测:根据两个阈值(高阈值和低阈值)将可能的边缘点分类为强边缘和弱边缘。如果像素值大于高阈值,则被标记为强边缘;如果像素值在低阈值和高阈值之间,则被标记为弱边缘。如果像素值低于低阈值,则被抑制。
- 边缘连接:在图像中连接强边缘,并删除与弱边缘不相连的弱边缘。
通过调整高阈值和低阈值,可以影响Canny边缘检测的结果。较高的阈值将产生更少的强边缘,而较低的阈值将产生更多的弱边缘。通常建议将高阈值设置为低阈值的3到2倍之间。
下面的代码展示了阈值对边缘检测的影响:
import cv2
img = cv2.imread("test.png") # 读取原图
r1 = cv2.Canny(img, 25, 50) # 使用不同的阈值进行边缘检测
r2 = cv2.Canny(img, 100, 200)
r3 = cv2.Canny(img, 200, 400) cv2.imshow("img", img)
cv2.imshow("r1", r1) # 显示边缘检测结果
cv2.imshow("r2", r2)
cv2.imshow("r3", r3)
cv2.waitKey()
cv2.destroyAllWindows()
5 霍夫变换
霍夫变换(Hough Transform)是一种常见的图像处理技术,用于检测图像中的各种形状。在OpenCV中,可以使用cv2.HoughLines()和cv2.HoughCircles()函数来执行霍夫变换。
5.1 检测直线
cv2.HoughLines()
函数用于检测二维平面上的直线。该函数接受二值化图像和一些可选参数作为输入,并返回检测到的直线的端点坐标。在进行霍夫变换之前,需要使用cv2.Canny()
函数对输入图像进行边缘检测。函数将返回一个二维数组,其中每一行表示检测到的一条直线的两个端点坐标。
cv2.HoughLines()
函数语法如下:
lines = cv2.HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None)
其中,参数含义如下:
image
:输入的二值化图像,即通过cv2.Canny()等函数得到的边缘图像。rho
:表示距离精度,以像素为单位。通常取值为1。theta
:表示角度精度,以弧度为单位。通常取值为np.pi/180,表示以1度为单位。threshold
:表示在霍夫空间中的最小投票数,用于确定一条直线是否存在。通常取值范围为0到图像宽高之和的一半。lines
:可选输出参数,用于存储检测到的直线,以numpy.ndarray格式返回。srn
:可选参数,表示霍夫梯度中径向和角度分辨率之间的参数,通常取默认值0。stn
:可选参数,表示霍夫梯度中两个角度之间的分辨率,通常取默认值0。min_theta
和max_theta
:可选参数,表示需要检测的直线的角度范围,以弧度为单位。
该函数将返回一个包含检测到的直线的端点坐标的numpy.ndarray数组。数组中每一行表示检测到的一条直线,包括两个端点的rho和theta值。
霍夫变换是一种计算密集型算法,处理大型图像时可能需要一定的计算时间。此外,霍夫变换对输入图像的质量要求较高,因此必须在边缘检测和二值化等预处理步骤上进行仔细的参数调整和图像优化,以获得最佳结果。
检测图像中存在直线的代码:
import cv2
import numpy as np img = cv2.imread("test.png") # 读取原图
o = img.copy() # 复制原图
o = cv2.medianBlur(o, 5) # 使用中值滤波进行降噪
gray = cv2.cvtColor(o, cv2.COLOR_BGR2GRAY) # 从彩色图像变成单通道灰度图像
binary = cv2.Canny(o, 50, 150) # 绘制边缘图像
# 检测直线,精度为1,全角度,阈值为100,线段最短100,最小间隔为30
lines = cv2.HoughLinesP(binary, 1, np.pi / 180, 100, minLineLength=100, maxLineGap=30)
for line in lines: x1, y1, x2, y2 = line[0] # 读取直线两个端点的坐标 cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2) # 在原始图像上绘制直线
cv2.imshow("canny", binary)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
5.2 检测圆形
cv2.HoughCircles()
函数用于检测圆形。该函数接受二值化图像、检测算法的参数以及圆的最小和最大半径作为输入,并返回检测到的圆的圆心坐标和半径。函数将返回一个三维数组,其中每个元素表示检测到的一个圆形,包括圆心坐标和半径。
cv2.HoughCircles()
函数语法如下:
circles = cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
其中:
image
:输入的二值化图像,即通过cv2.Canny()等函数得到的边缘图像。method
:表示霍夫变换检测圆形的方法。目前支持两种方法:cv2.HOUGH_GRADIENT和cv2.HOUGH_GRADIENT_ALT。dp
:表示霍夫梯度中心之间的累加器分辨率的反比例系数。通常取值为1,表示与图像像素一样的分辨率。minDist
:表示圆形之间的最小距离,以像素为单位。通常取值为圆形直径的两倍左右。circles
:可选输出参数,用于存储检测到的圆形,以numpy.ndarray格式返回。param1
:表示边缘检测的高阈值,用于辅助检测图像中的圆形。通常取值为100。param2
:表示霍夫变换中的累加器阈值,用于确定检测到的圆形是否存在。通常取值为30到50之间。minRadius
和maxRadius
:可选参数,表示需要检测的圆形的半径范围,以像素为单位。
该函数将返回一个包含检测到的圆形的圆心坐标和半径的numpy.ndarray数组。数组中每一行表示检测到的一个圆形,包括三个参数:圆心坐标x、y和半径r。
代码使用与检测直线非常相似,这里就不写示例代码了。
相关文章:
09 OpenCV图形检测
1 轮廓描边 cv2.findContours() 函数是OpenCV中用于寻找轮廓的函数之一。它可以用于在二值图像中查找并检测出所有的物体轮廓,以及计算出这些轮廓的各种属性,例如面积、周长、质心等。 cv2.findContours() 函数的语法如下: contours, hiera…...
解密Teradata与中国市场“分手”背后的原因!国产数据库能填补空白吗?
2月15日,西方的情人节刚刚过去一天,国内IT行业就爆出一个大瓜。 继Adobe、甲骨文、Tableau、Salesforce之后,又一个IT巨头要撤离中国市场。 Teradata天睿公司官宣与中国市场“分手”,结束在中国的直接运营。目前,多家…...
Bernstein-Vazirani算法
B-V算法 (1) 问题描述 给定布尔函数f:{0,1}n→0,1f:{\left\{ {0,1} \right\}^n} \to{0,1}f:{0,1}n→0,1, 函数fff的值是由输入比特串xxx和确定的比特串sss做模2意义下的内积:f(x)x⋅s(mod2),f\left( x \right) x \cdot s\left( {\bmod 2} \right),f(x)x⋅s(mod2),…...
华为OD机试 - 相对开音节 | 备考思路,刷题要点,答疑 【新解法】
最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...
MyBatis
一、MyBatis环境搭建创建工程启动idea开发工具,选择工具栏中的“file”--“new”--“project”选项弹出“new project”对话框,编辑项目名称 选择maven项目,项目路径 单击 create 创建即可。引入相关依赖<dependencies><dependency&…...
良好的作息表
今天给大家带来“传说中”的“世界上最健康的作息时间表”(仅供参考),随时提醒自己吧,毕竟身体可是自己的哦。 7:30 起床:英国威斯敏斯特大学的研究人员发现,那些在早上5:22-7:21分起床的人,其血液中有一种能引起心脏病…...
【郭东白架构课 模块一:生存法则】01|模块导学:是什么在影响架构活动的成败?
你好,我是郭东白。这节课是我们模块一的导入部分,我会先来介绍模块的主要内容,以及为什么我要讲生存法则这个话题。 一名软件架构师要为相对复杂的业务制定,并且引导实施一个结构化的软件方案。这个发现最终方案和推动实施的过程&…...
webshell免杀之函数与变量玩法
webshell免杀之函数与变量玩法 前言 前文列举了一些用符号免杀的例子,此篇文章就以函数和变量来尝试下免杀。 本文以PHP为例,用PHP中函数和变量及语法特性,在不隐藏函数关键字情况下进行免杀。 动态函数 PHP中支持一个功能叫 variable fu…...
【新解法】华为OD机试 - 去重求和 | 备考思路,刷题要点,答疑,od Base 提供
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 去重求和 | 备考思路,刷题要点,答疑,od Base 提供 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 输入 第一行输入M,M表示数组大小 第二行输入M个数,表…...
MySQL 服务正在启动.MySQL 服务无法启动.服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。总结较全 (已解决)
输入以下命令启动mysql: net start mysql出现以下错误提示: MySQL 服务正在启动 .MySQL 服务无法启动。服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。 出现这个问题的话,一般有几个情况: 一、MySQL安装文…...
【数据结构与算法】数组2:双指针法 二分法(螺旋矩阵)
文章目录今日任务1.Leetcode977:有序数列的平方(1)题目(2)思路(3)暴力排序(4)双指针法2.Leetcode209:长度最小的子数组(1)题目&#x…...
librtmp优化
librtmp是一个RTMP的开源库,很多地方用它来做推流、拉流。它是RTMPDump开源软件里的一部分,librtmp的下载地址:RTMPDump,目前最新版是V2.3。本文重点介绍librtmp优化。 1、调整网络输出块大小。 RTMP_Connect0函数中LibRTMP是关…...
数据结构与算法(二):线性表
上一篇《数据结构与算法(一):概述》中介绍了数据结构的一些基本概念,并分别举例说明了算法的时间复杂度和空间复杂度的求解方法。这一篇主要介绍线性表。 一、基本概念 线性表是具有零个或多个数据元素的有限序列。线性表中数据…...
IOS安全区域适配
对于 iPhone 8 和以往的 iPhone,由于屏幕规规整整的矩形,安全区就是整块屏幕。但自从苹果手机 iphoneX 发布之后,前端人员在开发移动端Web页面时,得多注意一个对 IOS 所谓安全区域范围的适配。这其实说白了就是 iphoneX 之后的苹果…...
在Java 中 利用Milo通信库,实现OPCUA客户端,并生成证书
程序结构: 配置文件resources: opcua.properties 西门子PLC端口号为4840,kepserver为49320 #opcua服务端配置参数 #opcua.server.endpoint.urlopc.tcp://192.168.2.102:49320 opcua.server.endpoint.urlopc.tcp://192.168.2.11:4840 opcu…...
三分钟学会用Vim
Vim知识点 目录Vim知识点一:什么是vim二:vim常用的三种模式三:vim的基本操作一:什么是vim vim最小集 vim是一款多模式的编辑器—各种模式—每种模式的用法有差别—每种模式之间可以互相切换 但是我们最常用的就是3~5个模式 vi…...
编译链接实战(8)认识elf文件格式
🎀 关于博主👇🏻👇🏻👇🏻 🥇 作者简介: 热衷于知识探索和分享的技术博主。 💂 csdn主页::【奇妙之二进制】 ✍️ 微信公众号:【Linux …...
新手小白如何入门黑客技术?
你是否对黑客技术感兴趣呢?感觉成为黑客是一件很酷的事。那么作为新手小白,我们该如何入门黑客技术,黑客技术又是学什么呢? 其实不管你想在哪个新的领域里有所收获,你需要考虑以下几个问题: 首先ÿ…...
【java】Spring Boot --深入SpringBoot注解原理及使用
步骤一 首先,先看SpringBoot的主配置类: SpringBootApplication public class StartEurekaApplication {public static void main(String[] args){SpringApplication.run(StartEurekaApplication.class, args);} }步骤二 点进SpringBootApplication来…...
一文掌握如何对项目进行诊断?【步骤方法和工具】
作为项目经理和PMO,面对错综复杂的项目,需要对组织的项目运作情况进行精确的分析和诊断,找出组织项目管理中和项目运行中存在的问题和潜在隐患,分析其原因,预防风险,并且形成科学合理的决策建议和解决方案&…...
系统分析师真题2020试卷相关概念二
结构化设计相关内容: 结构化设计是一种面向数据流的系统设计方法,它以数据流图和数据字典等文档为基础。数据流图从数据传递和加工的角度,以图形化方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模…...
<<Java开发环境配置>>5-MySQL安装教程(绿色版)
一.MySQL绿色版安装: 1.直接解压下载的ZIP文件到对应的目录下(切记安装目录不要有中文); 如图:我的安装目录:D:Program Files 2.创建配置文件: 在MySQL安装目录下,创建一个my.ini配置文件,然后在里面添加以下内容(别忘了MySQL安装目录要改成…...
空间复杂度与时间复杂度
1、时间复杂度和空间复杂度 (1)时间复杂度、空间复杂度是什么? 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,空间效率被称作空间复杂度时间复杂度主要衡量的是一…...
javaEE 初阶 — 延迟应答与捎带应答
文章目录1. 延迟应答2. 捎带应答TCP 工作机制:确认应答机制 超时重传机制 连接管理机制 滑动窗口 流量控制与拥塞控制 1. 延迟应答 延时应答 也是提升效率的机制,也是在滑动窗口基础上搞点事情。 滑动窗口的关键是让窗口大小大一点,传输…...
Twitter账号老被封?一文教会你怎么养号
昨天龙哥给大家科普完要怎么批量注册Twitter账号,立刻有朋友来私信龙哥说里面提到的这个养号和防关联具体是个怎么样的做法。由于Twitter检测机制还是比较敏感的,账号很容易被冻结,所以养号是非常重要的步骤。其实要养好Twitter账号其实并不难…...
当遇到国外客户的问题,你解决不了的时候怎么办
对我来说,今年的这个春节假期有点长,差不多休了一个月。复工之后,截止目前做到了60万RMB的业绩,但是相较于往年,整体状态还是差了些。往年的春节,我都是随时待命的状态,整个春节天天坐于电脑前&…...
算法刷题打卡第93天: 最大的以 1 为边界的正方形
最大的以 1 为边界的正方形 难度:中等 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。 示例 1: 输入:…...
python语言基础(最详细版)
文章目录一、程序的格式框架缩进1、定义2、这里就简单的举几个例子注释二、语法元素的名称三、数据类型四、数值运算符五、关系运算六、逻辑运算七、运算符的结合性八、字符串一、程序的格式框架 缩进 1、定义 (1)python中通常用缩进来表示代码包含和…...
Java小技能:字符串
文章目录 引言I 预备知识1.1 Object类1.2 重写的规则1.3 hashCode方法II String2.1 String的特性2.2 字符串和正则2.3 StringBuilder,StringBuffer引言 String,StringBuffer,StringBuilder,char[],用来表示字符串。 I 预备知识 1.1 Object类 是所有类的根类 toString…...
2023美赛D题:可持续发展目标
以下内容全部来自人工翻译,仅供参考。 文章目录背景要求术语表文献服务背景 联合国制定了17个可持续发展目标(SDGs)。实现这些目标最终将改善世界上许多人的生活。这些目标并不相互独立,因此,一些目标的积极进展常常…...
余姚网站建设公司/广州网络推广seo
使用PropertyGrid控件,如果直接自定义一个show对象SomeProperties,然后propertyGrid1.SelectedObject new SomeProperties();所有的属性都会以一行文本显示,如果有个属性可能出现文字较多的情况,那么一行文本显然是不够的&#x…...
网站设计方案怎么做/整合营销案例举例说明
第五周任务 这周开始学习函数,这在任何一门语言中都是一个大头(在Java中我们称为方法)。 首先很重要的一点是,如果你像我一样习惯把自定义的函数放在main方法后面的话,那么一定要记得先声明函数。例如我现在定义了一个…...
云服务器怎么建设网站/怎么自己刷推广链接
from jupyterthemes import get_themes import jupyterthemes as jt from jupyterthemes.stylefx import set_nb_theme set_nb_theme(solarizedd)...
广州网站建设广州网络推广公司/百度识图网站
上次给大家介绍了 Python 如何操作 Excel ,是不是感觉还挺有趣的,今天为大家再介绍下,用 Python 如何操作 Word ,这个可能跟数据处理关系不大,用的也不多,不过可以先了解下都能实现什么功能,以备…...
网站建设一般多少钱比较合适/seo工具是什么意思
Hello,大家好 这里是壹脑云科研圈,我是内啡肽~ 近期我们会持续更新【心理学领域顶尖作者介绍】系列,今天要给大家分享的是心理学领域中研究情绪(Emotions)的全球级顶尖大牛们。 信息来源:http://experts…...
建设网站目的及功能定位是什么/seo外包上海
iTOP-4418开发板 支持动态调频,AXP228电源管理,低功耗运行 系统支持:Android4.4/5.1.1、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04 内存:1GB DDR3(2GB)存储:16GB存储EMMC;4MB的E…...