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

简介: 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()


66b5ad01292046bea23ae409adf27350.png


四、实验结果


c1860489f99448c7bb952e938729285e.pngf844da1cd0aa47b0a29a171fd666fabc.png


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与当前其他主流视觉函数库的性能比较。


目录
打赏
0
0
0
0
17
分享
相关文章
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
102 20
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
93 10
|
3月前
|
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
92 18
|
3月前
|
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
103 7
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
153 3
|
5月前
|
【10月更文挑战第15天】「Mac上学Python 26」小学奥数篇12 - 图形变换与坐标计算
本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。
99 1
【10月更文挑战第11天】「Mac上学Python 22」小学奥数篇8 - 排列组合计算
本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。
99 4
【10月更文挑战第12天】「Mac上学Python 23」小学奥数篇9 - 基础概率计算
本篇将通过 Python 和 Cangjie 双语实现基础概率的计算,帮助学生学习如何解决简单的概率问题,并培养逻辑推理和编程思维。
81 1
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
1513 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
92 4
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等