【1】通常在处理数据时需要将结果保存到文件中,一般常用的为excel和txt文件中。
【2】保存csv具体代码
cvs写入的是列表,因此需要将表格的每一行转换为列表然后写入,encoding='utf-8-sig'如果不设置为此格式,打开csv文件中文会乱码。
if __name__=="__main__":
'''
以下方法将结果写入csv文档中
'''
openpath="D:/pythonprocedure/ConcludeArea/Dataset2/"
images,name=GetImg(openpath)
#打开文件 w表示只写,没有文件创建一个新的文件,
# encoding='utf-8-sig':写入的格式
#newline='' "":换行
file = open('result2.csv','w',encoding='utf-8-sig',newline='' "")
test1=["图片名"," 细胞膜的面积"," 细胞核的面积"," 细胞核占比"]
#实例化对象
csv_writer = csv.writer(file)
#写入数据
csv_writer.writerow(test1)
#建立一个列表用于写入数据
lista=[]
for index in range(len(images)):
inputImg=images[index]
GrayImg=cv2.cvtColor(inputImg ,cv2.COLOR_BGR2GRAY)
area1,area2,proportion=lowGravity(GrayImg)
test="Dataset1-"+str(name[index])
lista.append(test)
lista.append(area1)
lista.append(area2)
lista.append(proportion)
#写入数据
csv_writer.writerow(lista)
#清除列表,不清除会累加
lista.clear()
file.close()
print("end!")
【3】txt格式保存
txt格式只能保存字符串,而不能保存其他类型,因此需要将数据转换为字符串后在保存到结果中。
# -*- coding: utf-8 -*-
# @Time : 2020/6/28 13:23
# @Author : song
# @File : writeintxt.py
# @Software: PyCharm
from Concludearea import*
if __name__=="__main__":
'''
以下方法将结果写入csv文档中
'''
openpath="D:/pythonprocedure/ConcludeArea/Dataset2/"
images,name=GetImg(openpath)
file=open("result.txt","w")
test1="图片名"+" 细胞膜的面积"+" 细胞核的面积"+" 细胞核占比"
file.write(test1+'\n')
for index in range(len(images)):
inputImg=images[index]
GrayImg=cv2.cvtColor(inputImg ,cv2.COLOR_BGR2GRAY)
area1,area2,proportion=lowGravity(GrayImg)
test2="Dataset1-"+str(name[index])+" "+str(area1)+" "+str(area2)+" "+str(proportion)
#写入数据
file.write(test2+'\n')
file.close()
print("end!")
【4】完整代码
# -*- coding: utf-8 -*-
"""
author:song
"""
import cv2
import numpy as np
import os
import csv
def lowGravity(inputImg):
imgInfo=inputImg.shape
height=imgInfo[0]
width=imgInfo[1]
Cellmembrabcelist=[]
Cellnucleslist=[]
Cellmembrabce = np.zeros((height,width,1), np.uint8)
Cellnucles= np.zeros((height,width,1), np.uint8)
for cols in range(height):
for rows in range(width):
if inputImg[cols,rows]>100 and inputImg[cols,rows]<200:
Cellmembrabce[cols,rows]=255
Cellmembrabcelist.append(1)
if inputImg[cols,rows]>220 :
Cellnucles[cols,rows]=255
Cellnucleslist.append(1)
#计算面积
cv2.imwrite("Cellmembrabce.png",Cellmembrabce)
cv2.imwrite("Cellnucle.png",Cellnucles)
area1=len(Cellmembrabcelist)
area2=len(Cellnucleslist)
proportion=area2/(area1+area2)
return area1,area2,proportion
#载入图片,处理后保存到一个列表中
def GetImg(open_path):
patch=[]
name=[]
for dir_image in os.listdir(open_path): # os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
full_path = os.path.abspath(os.path.join(open_path,dir_image))
if dir_image.endswith('.png'):
image = cv2.imread(full_path)
(filepath, filename) = os.path.split(full_path)
nameall = os.path.splitext(filename)[0]
patch.append(image)
name.append(nameall)
return patch,name
if __name__=="__main__":
'''
以下方法将结果写入csv文档中
'''
openpath="D:/pythonprocedure/ConcludeArea/Dataset2/"
images,name=GetImg(openpath)
#打开文件 w表示只写,没有文件创建一个新的文件,
# encoding='utf-8-sig':写入的格式
#newline='' "":换行
file = open('result2.csv','w',encoding='utf-8-sig',newline='' "")
test1=["图片名"," 细胞膜的面积"," 细胞核的面积"," 细胞核占比"]
#实例化对象
csv_writer = csv.writer(file)
#写入数据
csv_writer.writerow(test1)
#建立一个列表用于写入数据
lista=[]
for index in range(len(images)):
inputImg=images[index]
GrayImg=cv2.cvtColor(inputImg ,cv2.COLOR_BGR2GRAY)
area1,area2,proportion=lowGravity(GrayImg)
test="Dataset1-"+str(name[index])
lista.append(test)
lista.append(area1)
lista.append(area2)
lista.append(proportion)
#写入数据
csv_writer.writerow(lista)
#清除列表,不清除会累加
lista.clear()
file.close()
print("end!")
【5】结果展示