Python计算细胞核与细胞质的面积比opencv或pil实验

前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料)


一、题目

根据附件cell.jipg,使用opencv库或者PIL库计算细胞核与细胞质的面积比。

二、题目分析

这道题目识别细胞的时候,要分别识别细胞核和细胞膜。对此进行操作的时候,首先需要将图像转化成灰度图像。接着需要将灰度图像二值化,通过threshold方法传入灰度图像和阙值,我们根据细胞核和细胞膜的颜色得到核的阙值为131,细胞质的阙值为220,然后第三个参数传入最大阙值255,第四个参数为THRESH_BINARY,表示二进制化阙值。
然后根据内核的大小,抛弃掉边界附近的像素。kernel =np.ones((2,2),np.uint8),在这里我们使用2*2的内核,它包含了所有的1。之后通过开运算传入图像,内核等进行计算。接着通过canny函数进行边界检测,查找出轮廓然后提取边框。通过findContours传入检测到的边缘。最后通过两个列表储存边框面积,获取最大面积对应的索引框,通过计算得出的细胞核和细胞质的大小相除就得到了核质比

三、代码

import cv2
import numpy as np
img = cv2.imread("cell.jpg")
# 转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("gary", gray)
# 二值化
thresh1, Cellmask = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY)
thresh2, Coremask = cv2.threshold(gray, 131, 255, cv2.THRESH_BINARY)
# 开运算
kernel = np.ones((2, 2), np.uint8)
Cellmask = cv2.morphologyEx(Cellmask, cv2.MORPH_OPEN, kernel)
Coremask = cv2.morphologyEx(Coremask, cv2.MORPH_OPEN, kernel)# 边缘检测
cannyCell = cv2.Canny(Cellmask, 40, 200)
cannyCore = cv2.Canny(Coremask, 40, 200)
# 边框提取
Cell, Celldata = cv2.findContours(cannyCell, mode=cv2.RETR_EXTERNAL, method=cv2.CHAIN_APPROX_NONE)
Core, Coredata = cv2.findContours(cannyCore, mode=cv2.RETR_EXTERNAL, method=cv2.CHAIN_APPROX_NONE)# 存储边框面积
CellS = []
CoreS = []
for i in range(len(Cell)):CellS.append(cv2.contourArea(Cell[i]))
for i in range(len(Core)):CoreS.append(cv2.contourArea(Core[i]))
# 获取最大面积对应边框索引
Maxcell = CellS.index(max(CellS))
Maxcore = CoreS.index(max(CoreS))cv2.drawContours(img, Cell, Maxcell, (0, 255, 0), 1)
cv2.drawContours(img, Core, Maxcore, (0, 0, 255), 1)
cv2.imshow("Cellmask", cannyCell)
cv2.imshow("Coremask", cannyCore)
cv2.imshow("img", img)print("核质面积比为:{:.3f}".format(max(CoreS) / (max(CellS)-max(CoreS))))
cv2.waitKey()

在这里插入图片描述

四、实验结果

在这里插入图片描述
在这里插入图片描述


OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。

为什么有OpenCV?
计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
1、研究代码(慢,不稳定,独立并与其他库不兼容)
2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。
OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 10:将流收集到不可修改的集合中

Java 10引入了几种新方法来促进不可修改集合的创建。 List.copyOf &#xff0c; Set.copyOf和Map.copyOf方法从现有实例创建新的集合实例。 例如&#xff1a; List<String> modifiable Arrays.asList("foo", "bar"); List<String> unmodifi…

Ollydbg使用教程学习总结(二)

解密系列之OD使用教程4 程序1&#xff1a;RegisterMe.exe 把程序跑一遍之后我们发现程序有两个NAG&#xff0c;一个是在程序界面启动前出现&#xff0c;另一个是在程序关闭后出现的。 去掉第一个Nag方法如下&#xff1a; ①jmp跳过 ②全部nop掉 ③令hOwner参数为1&#xf…

Python基于Django的电影推荐系统和论坛项目完整源码

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;电影论坛 获…

Ollydbg使用教程学习总结(三)

解密系列之OD使用教程9 程序&#xff1a;MrBills.exe 点击注册&#xff0c;输入邮箱和序列号后提示如下 突破口&#xff1a;该提示窗口中的字符串&#xff0c;查找如下 双击来到反汇编窗口&#xff0c;有个关键跳转&#xff0c;往上查看影响跳转的语句是test al,al&#xf…

Python用matplotlib绘制曲线实验

一、题目 计算出每组数据的均值和标注差&#xff0c;用matplotlib画出如下风格。横轴是每组的序号&#xff0c;即1&#xff0c;2&#xff0c;… 10&#xff0c;曲线的圆点对应均值&#xff0c;颜色范围为标注差&#xff0c;显示垂直和水平网格线。 二、题目分析 首先分析这…

java 设计模式 示例_Java中的状态设计模式–示例教程

java 设计模式 示例状态模式是行为设计模式之一 。 当对象根据其内部状态更改其行为时&#xff0c;将使用状态设计模式。 如果必须根据对象的状态更改其行为&#xff0c;则可以在对象中使用状态变量&#xff0c;并使用if-else条件块根据该状态执行不同的操作。 状态模式用于通…

Ollydbg使用教程学习总结(五)

解密系列之OD使用教程17——inline patch 程序&#xff1a;ReverseMe. NAGs.exe 新内容&#xff1a;硬件断点 用PEID打开&#xff0c;看到程序是用VC6.0写的&#xff0c;用OD载入&#xff0c;按F9运行后&#xff0c;出现NAG窗口&#xff0c;在OD中按下暂停&#xff0c;再打开堆…

Python的Wine数据集分类scikit-learn和K近邻实验

一、题目 请使用scikit-learn库和K近邻分类器完成Wine数据集的分类&#xff0c;训练比例自定。(数据下载: https://archive.ics.uci.edu/ml/datasets/Wine) 二、题目分析 这道题目就是获取数据然后分类的过程。首先在网站上下载好数据。然后回到Pycharm导入实验所需要的skle…

[MEGA DEAL]完整的Java捆绑包(96%折扣)

深入了解编程奥德赛&#xff08;58小时&#xff01;&#xff09;&#xff0c;进入最常用的编程语言 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了另一个超值优惠 。 我们为The Complete Java Bundle提供96&#xff05;的…

基于PLC十字路口交通灯控制(可计算车流量、调整时间等)课程设计毕业设计

微信公众号&#xff1a;创享日记 发送&#xff1a;plc交通灯 获取完整论文报告&#xff08;内含梯形图程序、无水印流程图等&#xff09; 按照城市交通控制的需要&#xff0c;本文讨论了用PLC实现正常时序、急车强通2种控制方式&#xff0c;通过传感器与PLC完成对交通异常状况&…

Ollydbg使用教程学习总结(四)

解密系列之OD使用教程13——迷途 程序&#xff1a;XoftSpy41._96.exe 用PEID查看&#xff0c;是VC6编写的程序&#xff0c;用OD载入 获取文本框输入内容API&#xff1a;GetWindowTextA API下断方法&#xff1a; a.右键>查找>所有模块间的调用&#xff0c;直接输入API&am…

基于PLC高层楼房供水系统课程设计毕业设计

设计目的 &#xff08;1&#xff09;能够检测到水箱的水位并用指示灯显示。 &#xff08;2&#xff09;由检测到水箱的水位&#xff0c;实现3台电机的供水要求。 &#xff08;3&#xff09;设计plc程序。 设计要求 &#xff08;1&#xff09;确定输入/输出设备。 &#xff08;…

【通信原理课程设计】8PSK调制解调技术的设计与仿真(MATLAB)

摘要 在数字信号的调制方式中8PSK是目前最常用的一种数字信号调制方式,它具有较高的频谱利用率、较强的抗干扰性、在电路上实现也较为简单。调制技术是通信领域里非常重要的环节,一种好的调制技术不仅可以节约频谱资源而且可以提供良好的通信性能。8PSK调制是一种具有较高频带…

基于PLC四层电梯模型控制系统课程设计

总设计要求 1.1 电梯上行设计要求 ①当电梯停于1F或2F、3F时&#xff0c;4F呼叫&#xff0c;则上行到4F&#xff0c; 碰行程开关后停止。 ②当电梯停于1F或2F时&#xff0c;3F呼叫&#xff0c;则_上行到3F&#xff0c;碰行程开关后停止。 ③当电梯停于1F时&#xff0c;2F 呼叫…

ini配置文件的读写

很多时候&#xff0c;我们的程序运行前需要用户做一些相关的设置&#xff0c;而且我们总是需要把一些配置信息保存下来&#xff0c;那天一直在思考怎么解决这个问题&#xff0c;突然就想到了在一些软件安装目录下的ini文件&#xff0c;然后经过查找资料发现其实ini文件既方便又…

自定义jackson序列化_Jackson中的自定义反序列化程序和验证

自定义jackson序列化tl; dr&#xff1a;将输入验证添加到Jackson中的自定义json解串器中很重要。 在RHQ中&#xff0c;我们在几个地方使用了Json解析-直接在as7 / Wildfly插件中&#xff0c;或者通过RESTEasy 2.3.5间接在REST-api中使用&#xff0c;已经很繁重了。 现在&…

基于西门子PLC s7-200 的自动立体车库设计自动化设计(控制器步进电机直流电机)

本组的设计题目是《基于 PLC 的立体车库设计》&#xff0c;本组设计包括机械设计&#xff0c;电路设计以及程序设计。在设计中遇到了很多困难&#xff0c;参考了相关资料&#xff0c;与老师进行多次沟通&#xff0c;一边学习一边制作&#xff0c;以厂家资料为标准进行修改&…

在Java 8之前,您编写了几行代码来对对象集合进行排序?

在Java 8之前&#xff0c;您编写了几行代码来对对象集合进行排序&#xff1f; Java 8您需要多少个&#xff1f; 您可以在Java 8中用一行完成。 让我们看看下面的Employee类。 public class Employee {private String name;private Integer age;public Employee(String name,…

MFC无边框对话框实现拖动

解决无标题栏窗口的拖动问题有两种方案&#xff0c;一种方案是使用常规思路来处理鼠标拖拽事件&#xff0c;当窗口获得WM_LBUTTONDOWN&#xff08;OnLButtonDown&#xff09;时&#xff0c;通过设置标志并调用CWnd::SetCapture&#xff08;&#xff09;函数来让当前窗口捕捉鼠标…

基于51单片机的8八路抢答器设计

基于51单片机的8路抢答器 具体功能&#xff1a; &#xff08;1&#xff09;主持人进行复位&#xff0c;依次显示8位选手的分数&#xff0c;8位选手分数显示结束后主持人方可按下开始按键&#xff1b; &#xff08;2&#xff09;主持人按下抢答开始按键&#xff0c;抢答者才可以…