百度
360搜索
搜狗搜索

python+opencv实现细胞个数检测,python3.6怎么使用opencv详细介绍

本文目录一览: 2021-02-08 Python OpenCV GaussianBlur()函数

borderType= None)函数
此函数利用高斯滤波器平滑一张图像。该函数将源图像与指定的高斯核进行卷积。

src:输入图像
ksize:(核的宽度,核的高度),输入高斯核的尺寸,核的宽高都必须是正奇数。否则,将会从参数sigma中计算得到。
dst:输出图像,尺寸与输入图像一致。
sigmaX:高斯核在X方向上的标准差。
sigmaY:高斯核在Y方向上的标准差。默认为None,如果sigmaY=0,则它将被设置为与sigmaX相等的值。如果这两者都为0,则它们的值会从ksize中计算得到。计算公式为:

borderType:像素外推法,默认为None(参考官方文档 BorderTypes
)

在图像处理中,高斯滤波主要有两种方式:
1.窗口滑动卷积
2.傅里叶变换

在此主要利用窗口滑动卷积。其中二维高斯函数公式为:

根据上述公式,生成一个3x3的高斯核,其中最重要的参数就是标准差 ,标准差 越大,核中心的值与周围的值差距越小,曲线越平滑。标准差 越小,核中心的值与周围的值差距越大,曲线越陡峭。
从图像的角度来说,高斯核的标准差 越大,平滑效果越不明显。高斯核的标准差 越小,平滑效果越明显。

可见,标准差 越大,图像平滑程度越大

参考博客1:关于GaussianBlur函数
参考博客2:关于高斯核运算

Python3.5怎么配置OpenCV3.2

这次给大家带来 Python3.5怎么配置OpenCV3.2, Python3.5配置OpenCV3.2的注意事项有哪些,下面就是实战案例,一起来看一下。1.OpenCV下载 首先创建一个空的文件夹,进入文件夹执行如下命令,如我创建的文件夹是opencv-pythoncd opencv-pythongit clone https://github.com/opencv/opencv.git也可以直接进入网址OpenCV_Download下载使用git下载后应有一个名字为opencv的文件夹,进入文件夹执行如下命令:cd opencvmkdir buildcd build2.编译opencv源码 使用cmake编译opencv源码,在编译前请确认所有的依赖项已经正确安装,可执行如下命令:sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev如果项目已经安装会自动略过,如果项目没有安装则会安装。在使用cmake编译阶段系统是64位还是32位在这个地方执行的命令是不同的我的电脑比较渣,装的是32位的系统,这里以32位系统的编译命令为主,同样介绍64位的编译命令,理论上除了文件路径其他应该一样,但是没有经过验证,请慎重!!!以上执行完毕后,32位执行如下命令进行编译cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local PYTHON3_EXECUTABLE = /usr/bin/python3 PYTHON_INCLUDE_DIR = /usr/include/python3.5 PYTHON_INCLUDE_DIR2 = /usr/include/i386-linux-gnu/python3.5m PYTHON_LIBRARY = /usr/bin/i386-linux-gnu-python3/libpython3.5m.so PYTHON3_NUMPY_INCLUDE_DIRS = /usr/local/lib/python3.5/dist-packages/numpy/core/include/ ..对于64位系统,cmake命令中的可选项即PYTHON_INCLUDE_DIR等在官方指导文件中可以通过下列提示具体查看PYTHON2(3)_EXECUTABLE =

PYTHON_INCLUDE_DIR = /usr/include/python

PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python

PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu/libpython

.soPYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python

/dist-packages/numpy/core/include/参考网上其他人给出的编译命令,将64位系统编译命令写出,但是未经本人验证,如果有已经配置成功的同学请给我留言,以便完善。cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local PYTHON3_EXECUTABLE = /usr/bin/python3 PYTHON_INCLUDE_DIR = /usr/include/python3.5 PYTHON_INCLUDE_DIR2 = /usr/include/x86_64-linux-gnu/python3.5m PYTHON_LIBRARY = /usr/lib/x86_64-linux-gnu-python3/libpython3.5m.so PYTHON3_NUMPY_INCLUDE_DIRS = /usr/local/lib/python3.5/dist-packages/numpy/core/include/ ..64位或32位系统编译opencv只在cmake命令有差别,cmake执行完之后分别执行如下命令makesudo make install如果没有出错的话,至此使用python3开发opencv的开发环境就已经配置完成了。写个小程序试一下:示例代码import cv2srcImage = cv2.imread('lena.jpg')cv2.imshow('Python3', srcImage)cv2.waitKey(0)运行结果如下:相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:python怎么逐行读写txt文件python怎么批量读取txt文件为DataFrame格式

python分析单细胞数据,多细胞去除的模块

hi,各位道友,上次我们介绍了R包DoubletFinder用于去除多细胞 那么python是否也有类似的模块去除多细胞呢,答案是有的。这次我们就来使用一下python模块去除多细胞
Single-Cell Remover of Doublets Python code for identifying doublets in single-cell RNA-seq data 给定一个原始的(未归一化的)UMI,以细胞为行,基因为列的矩阵counts_matrix计数,计算每个单元的多细胞得分。
scr.scrub_doublets()从观察到的数据模拟双峰,并使用k最近邻分类器为每个转录组计算一个连续doublet_score(介于0和1之间)。 分数将自动设置为阈值以生成predicted_doublets,这是一个布尔数组,对于预测的doublets为True,否则为False。 最佳做法: 一、处理来自多个样本的数据时,请分别对每个样本运行Scrublet。 因为Scrublet旨在检测由两个细胞的随机共封装形成的多细胞捕获,所以它在多个样本的合并数据集上可能表现不佳(原因大家都懂的)。 二、检查doublet分数阈值是否合理(在理想情况下,如本例所示,将双峰模拟doublet分数直方图的两个峰分开),并在必要时进行手动调整。例子在本文的后面展示。 三、可视化二维嵌入中的多细胞预测(例如UMAP或t-SNE)。 预测的双峰应该大体上共定位(可能在多个群集中)。 如果不是,则可能需要调整doublet得分阈值,或更改预处理参数以更好地解析数据中存在的单元格状态。
接下来我们看一下如何使用 第一步,导入必要的模块
第二步:读入矩阵,要求如上述所讲,计算多细胞比率
这一步包括 Initialize Scrublet object 相关参数是: expected_doublet_rate:预期多细胞的比率,通常为0.05-0.1。 结果对该参数不是特别敏感。 sim_doublet_ratio:相对于观察到的转录组数量,要模拟的双峰数量。 此值应该足够高,以使所有的doublet状态都能通过模拟doublet很好地表示。 设置得太高在计算上是耗时的。 默认值是2,尽管低至0.5的值会为已测试的数据集提供非常相似的结果。 n_neighbors:用于构造观察到的转录组和模拟多细胞的KNN分类器的邻居数。 通常,round(0.5 * sqrt(n_cells))的默认值效果很好。 运行默认pipeline,其中包括: 双重模拟 标准化,基因过滤,重新缩放,PCA 多细胞计算 多细胞得分阈值检测和双峰调用
绘制观察到的转录组和模拟多细胞的多细胞得分直方图 模拟的多细胞直方图通常是双峰的。左模式对应于由具有相似基因表达的两个细胞产生的“嵌入”多细胞。 右边的的模式对应于“新型”多细胞,其由具有不同基因表达的细胞产生。 Scrublet只能检测”新型“双峰,这一点和doubleFinder的R包一样。 要比较单细胞与多细胞,我们必须设置一个阈值多细胞得分,理想情况下,应在模拟的双峰直方图的两种模式之间设置最小值。 scrub_doublets()尝试自动识别这一点,并且在本示例中做得很好。 但是,如果自动阈值检测效果不佳,则可以使用call_doublets()函数调整阈值。 例如: scrub.call_doublets(threshold=0.25) 接下来我们画一下这个多细胞分布的直方图:
获取二维嵌入以可视化结果 (Tsne同理)

数字图像处理基于Python如何数一张图片的物体有多少个?

如果要使用Python进行数字图像处理,可以使用OpenCV库来数一张图片的物体有多少个。
下面是一个简单的例子,可以使用OpenCV库来数一张图片中的小球数量:
import cv2
# 读取图片
img = cv2.imread("balls.jpg")
# 将图片转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用阈值分割法,得到二值图
thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)[1]
# 寻找图像中的轮廓
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
# 显示图像中的轮廓数量
print("图像中的轮廓数量:{}".format(len(cnts)))

【python】opencv库中cv2.findContours()和cv2.drawContours()函数

一.查找轮廓

cv2.findContours()

[image,] contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

轮廓检索方式:

轮廓近似方法:

二.绘制轮廓

cv2.drawContours()

cv2.drawContours(img, contours, -1, (0, 0, 255), 2)?

python3.6怎么使用opencv

安装:
命令行  pip install D:\python3.6.1\Scriptsopencv_python-3.2.0-cp36-cp36m-win_amd64.whl
测试代码:
import cv2
img = cv2.imread('text.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果

想用opencv识别图像中特定物体的个数,怎么做到

基本上那就需要使用机器学习或者深度学习来实现模式识别了。通过模式识别能够找出图像上指定物体的位置和个数。但还要看呢具体要识别的是什么,现阶段人脸的检测做的很好。使用机器学习需要为特定物体创建一套识别方法然后再训练分类器。深度学习就需要有大量的正反数据来对模型进行训练才行。

如何构建OpenCV和Python环境

Open Source Computer Vision Library.OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、MacOS操作系统上。它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。最新版本是3.1 ,2016年1月29日发布。简言之,通过openCV可实现计算机图像、视频的编辑。广泛应用于图像识别、运动跟踪、机器视觉等领域。一切就绪以后以管理员身份运行cmd或PowerShell。依次输入以下命令:(推荐学习:Python视频教程)pip install --upgrade setuptoolspip install numpy Matplotlibpip install opencv-pythonopencv环境已经整好,就是这么简单。只需要numpy、Matplotlib、opencv-python三个包,都不大很快就可以下好,如果下载中间出现error或wrong,重新输入命令即可。测试#导入cv模块import cv2 as cv#读取图像,支持 bmp、jpg、png、tiff 等常用格式img = cv.imread("D:python est.jpg")#创建窗口并显示图像cv.namedWindow("Image")cv.imshow("Image",img)cv.waitKey(0)#释放窗口cv2.destroyAllWindows()运行以上脚本,如果可以显示出测试的图像,则环境搭建成功更多Python相关技术文章,请访问Python教程栏目进行学习!

阅读更多 >>>  120hz刷新率什么意思

如何用OpenCV训练自己的分类器

目标检测方法最初由Paul
Viola
[Viola01]提出,并由Rainer
Lienhart
[Lienhart02]对这一方法进行了改善。该方法的基本步骤为:
首先,利用样本(大约几百幅样本图片)的
harr
特征进行分类器训练,得到一个级联的boosted分类器。
分类器中的"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器,
这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。
分类器训练完以后,就可以应用于输入图像中的感兴趣区域的检测。检测到目标区域分类器输出为1,否则输出为0。为了检测整副图像,可以在图像中移动搜索窗口,检测每一个位置来确定可能的目标。
为了搜索不同大小的目标物体,分类器被设计为可以进行尺寸改变,这样比改变待检图像的尺寸大小更为有效。所以,为了在图像中检测未知大小的目标物体,扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描。
目前支持这种分类器的boosting技术有四种:
Discrete
Adaboost,
Real
Adaboost,
Gentle
Adaboost
and
Logitboost。
"boosted"
即指级联分类器的每一层都可以从中选取一个boosting算法(权重投票),并利用基础分类器的自我训练得到。
根据上面的分析,目标检测分为三个步骤:
1、
样本的创建
2、
训练分类器
3、
利用训练好的分类器进行目标检测。
哪个模型?haarlike+adaboost?还是其它ml模型?
如果是haarlike+adaboost做物体检测,请度娘:OpenCV之_HaarTraining算法剖析,
如果是其它的ml模型,请调用相应模型的train,完成后会生成xml文件,然后preict即可。
首先,需要说明的是,OpenCV自带的haar training提取的特征是haar特征 分类器是AdaBoost级联分类器(如需了解Adaboost算法, 。所谓的级联分类器,就是将若干的简单的分量分类器(可以理解为一般的普通分类器)依次串联起来,最终的检测分类结果,要依次通过所有的分量分类器才能算是一个有效的检测分类结果。否则,就认为当前检测区域内没有我们需要找的目标。
利用OpenCV自带的haar training程序训练一个分类器,需要经过以下几个步骤:
(1)收集训练样本:
训练样本包括正样本和负样本。正样本,通俗点说,就是图片中只有你需要的目标。而负样本的图片只要其中不含有目标就可以了。但需要说明的是,负样本也并非随便选取的。例如,你需要检测的目标是汽车,那么正样本就应该是仅仅含有汽车的图片,而负样本显然不能是一些包含天空的,海洋的,风景的图片。因为你最终训练分类器的目的是检测汽车,而汽车应该出现在马路上。也就是说,分类器最终检测的图片应该是那些包含马路,交通标志,建筑物,广告牌,汽车,摩托车,三轮车,行人,自行车等在内的图片。很明显,这里的负样本应该是包含摩托车、三轮车、自行车、行人、路面、灌木丛、花草、交通标志、广告牌等。
另外,需要提醒的是,adaboost方法也是机器学习中的一个经典算法,而机器学习算法的前提条件是,测试样本和训练样本独立同分布。所谓的独立同分布,可以简单理解为:训练样本要和最终的应用场合非常接近或者一致。否则,基于机器学习的算法并不能保证算法的有效性。此外,足够的训练样本(至少得几千张正样本、几千张负样本)也是保证训练算法有效性的一个前提条件。
这里,假设所有的正样本都放在f:/pos文件夹下,所有的负样本都放在f:/neg文件夹下;
(2)对所有的正样本进行尺寸归一化:
上一步收集到的正样本,有很多的尺寸大小,有的是200*300,有的是500*800...尺寸归一化的目的,就是把所有的图片都缩放到同一大小。比如,都缩放到50*60的大小。
(3)生成正样本描述文件:
所谓的正样本描述文件,其实就是一个文本文件,只不过,很多人喜欢将这个文件的后缀改成.dat而已。正样本描述文件中的内容包括:文件名 目标个数 目标在图片中的位置(x,y,width,height)
典型的正样本描述文件如下所示:
0.jpg 1 0 0 30 40
1.jpg 1 0 0 30 40
2.jpg 1 0 0 30 40
.....
不难发现,正样本描述文件中,每一个正样本占一行,每一行以正样本图片开头,后面紧跟着该图片中正样本的数量(通常为1),以及正样本在图片中的位置
假如,f:\pos文件夹下有5000个正样本图片,每个图片中仅有一个目标。那么,我们可以写程序(遍历文件夹中的所有图片文件,将文件名写入到文件中,将正样本在图片中的位置,大小都写入文件中)生成一个pos.dat文件作为正样本描述文件。
(4)创建正样本vec文件
由于haarTraining训练的时候需要输入的正样本是vec文件,所以需要使用createsamples程序来将正样本转换为vec文件。
打开OpenCV安装目录下bin文件夹里面的名为createSamples(新版本的OpenCV里面改名为opencv_createSamples)的可执行程序。需要提醒的是,该程序应该通过命令行启动(可以参考我的另一篇博客:http://blog.csdn.net/carson2005/article/details/6704589 )。并设置正样本所在的路径以及生成的正样本文件保存路劲(例如:f:\pos\pos.vec)。
Createsamples程序的命令行参数:
命令行参数:
-vec

训练好的正样本的输出文件名。

-img

源目标图片(例如:一个公司图标)

-bg

背景描述文件。

-num

要产生的正样本的数量,和正样本图片数目相同。

-bgcolor

背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh参数来指定。则在bgcolor-bgthresh和bgcolor+bgthresh中间的像素被认为是透明的。

-bgthresh

-inv

如果指定,颜色会反色

-randinv

如果指定,颜色会任意反色

-maxidev

背景色最大的偏离度。

-maxangel

-maxangle



-maxzangle

最大旋转角度,以弧度为单位。

-show

如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程继续。这是个有用的debug选项。

-w

输出样本的宽度(以像素为单位)

-h《sample_height》

输出样本的高度,以像素为单位。

(5) 创建负样本描述文件

在保存负样本的文件夹下生成一个负样本描述文件,具体步骤同(3),此处不再赘叙;

(6)进行样本训练

该步骤通过调用OpenCV\bin目录下的haartraining程序(新版本的opencv改名为opencv_haartraining)来完成。其中,Haartraining的命令行参数为:

-data

存放训练好的分类器的路径名。

-vec

正样本文件名(由trainingssamples程序或者由其他的方法创建的)

-bg

背景描述文件。

-npos



-nneg

用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg = 3000

-nstages

训练的级联分类器层数。

-nsplits

决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier被使用。如果是2或者更多,则带有number_of_splits个内部节点的CART分类器被使用。

-mem

预先计算的以MB为单位的可用内存。内存越大则训练的速度越快。

-sym(default)

-nonsym

指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。

-minhitrate《min_hit_rate》

每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate的number_of_stages次方。

-maxfalsealarm

没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate的number_of_stages次方。

-weighttrimming

指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9

-eqw

-mode

选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。

-w《sample_width》

-h《sample_height》

训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同。

一个训练分类器的例子:

"D:\Program Files\OpenCV\bin\haartraining.exe" -data data\cascade -vec data\pos.vec -bg negdata\negdata.dat -npos 49 -nneg 49 -mem 200 -mode ALL -w 20 -h 20

训练结束后,会在目录data下生成一些子目录,即为训练好的分类器。

(7) 生成xml文件

上一步在进行haartraining的时候,会在data目录下生成一些目录及txt文件,我们需要调用opencv\bin\haarconv.exe将这些txt文件转换为xml文件,也就是所谓的分类器。

至此,分类器的训练工作已完成。剩下的,就是在程序中加载xml文件,并调用相应的函数接口来实现分类检测的作用了。

python检测人数代码?

您好!下面是一个使用 OpenCV 库来检测人数的 Python 代码:
import cv2
# 读入视频文件
video = cv2.VideoCapture("video.mp4")
# 创建人体检测器
body_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
# 初始化人数计数器
people_count = 0
# 循环读取每一帧
while True:
# 读取当前帧
ret, frame = video.read()
# 如果视频结束,退出循环
if not ret:
break
# 转为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 使用人体检测器检测人体
bodies = body_cascade.detectMultiScale(gray, 1.1, 3)
# 将检测到的人体绘制矩形框
for (x, y, w, h) in bodies:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 将矩形框中的人数加 1
people_count += len(bodies)
# 显示当前帧
cv2.imshow("Frame", frame)
# 如果按下 'q' 键,退出循环
if cv2.waitKey(1) == ord('q'):
break
# 关闭窗口
cv2.destroyAllWindows()
# 输出总人数
print(f'Total people count: {people_count}')
在上面的代码中,我们还初始化了一个 people_count 变量来记录人数,并在每一帧中通过检测到的人体数量来更新人数计数器。最后,我们使用了 OpenCV 的 imshow 函数来显示当前帧的图像,并使用 waitKey 函数来检测是否按下了 'q' 键。如果按下 'q' 键,就会退出循环。
在循环结束后,我们使用了 destroyAllWindows 函数来关闭所有打开的窗口,并使用 print 函数输出总人数。
如果我的回答对您有帮助,望采纳!谢谢

阅读更多 >>>  高斯低通滤波是什么

网站数据信息

"python+opencv实现细胞个数检测,python3.6怎么使用opencv"浏览人数已经达到19次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:python+opencv实现细胞个数检测,python3.6怎么使用opencv的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!