python读取文件,opencv在图片上画矩形框
1 python读取单个文件
附代码,中间的部分注释代码可以不用管,留着只是方便自己以后查看。
with open('plane.txt', 'r') as f: # 打开当前文件夹下面的plane.txt文件,文件打开操作区别,可以参考这个对文件读写进行了解https://www.cnblogs.com/zyber/p/9578240.html
lines = f.readlines()
splitlines = [x.strip().split(' ') for x in lines]# strip()是删除,split()是分割。
#有关strip()和split()函数的用法,参见
#https://www.cnblogs.com/yyxayz/p/4034299.html
#https://www.jb51.net/article/104453.htm
#print(splitlines)
#print(len(splitlines))
splitlines = splitlines[2:] #此时splitlines是矩阵,矩阵基本操作,这句意思是跳过文件前两行不进行处理。这里主要区分数组np.array和列表list区别。
for splitline in splitlines:
#print(splitline)
#print(len(splitline))
#print(float(splitline[1]))
if(float(splitline[1]) >= 0.5):
#print(float(splitline[1]))
print(splitline)
i=i+1
splitline = splitline[2:]#这是1维的,不是矩阵,对应前面矩阵,这操作表示跳过前两个值不处理。
print(splitline)
x, y, x1, y1 = splitline#这四个值都是字符串类型str,python没有字符类型,单个字符的类型被称作只含有一个字符的字符串类型
x, y, x1, y1 = float(x), float(y), float(x1), float(y1)#这里需要注意,不能直接用int()转换,原因是int()只能包含数字,不能包含.之类的,否则报错,具体错误参考https://blog.csdn.net/qq_41891803/article/details/81321323
#print(x, y, x1, y2)
draw_1=cv2.rectangle(image, (int(x),int(y)), (int(x1),int(y1)), (0,255,0), 2)
#print(i)
2 opencv在图片上画矩形框
2.1 图片操作
附代码
import cv2
# 在当前文件夹下读取图片
image = cv2.imread("P0170.png")
GrayImage=cv2.cvtColor(image ,cv2.COLOR_BGR2GRAY)
# 对GrayImage进行处理的程序
cv2.imwrite("vertical_flip.jpg", GrayImage)#将处理过的图片保存到当前文件夹
#
cv2.namedWindow("draw_0",2) # 2的意思是可以调整显示框的大小,1不能调整,不需要调整框的大小可以不用这句话
cv2.imshow("draw_0", GrayImage)#显示图片
cv2.waitKey(0)
cv2.destroyWindow("draw_0")
2.2 绘制矩形框
就是利用cv2.rectangle函数
draw_1=cv2.rectangle(image, (x,y), (x1,y1), (0,255,0), 2)
# image表示处理的图片
# (x,y)和(x1,y1)分别表示矩形框的左上和右下两个点
# (0,255,0)表示框的颜色
# 2表示框的粗细
3 python读取文件,opencv在图片上画矩形框
# -*- coding: utf-8 -*-
"""
Created on Sun Apr 26 12:16:24 2020
@author: cxz_w
"""
import cv2
image = cv2.imread("P0170.png")
GrayImage=cv2.cvtColor(image ,cv2.COLOR_BGR2GRAY)
with open('plane.txt', 'r') as f:
lines = f.readlines()
splitlines = [x.strip().split(' ') for x in lines]
for splitline in splitlines:
if(float(splitline[1]) >= 0.5):
print(splitline)
splitline = splitline[2:]
print(splitline)
x, y, x1, y1 = splitline
x, y, x1, y1 = float(x), float(y), float(x1), float(y1)
#print(x, y, x1, y2)
draw_1=cv2.rectangle(image, (int(x),int(y)), (int(x1),int(y1)), (0,255,0), 2)
cv2.imwrite("vertical_flip.jpg", draw_1)
cv2.namedWindow("draw_0",2)
cv2.imshow("draw_0", draw_1) #显示画过矩形框的图片
cv2.waitKey(0)
cv2.destroyWindow("draw_0")
P0170.png
plane.txt
vertical_flip.jpg
至此,问题解决。
参考博客
https://blog.csdn.net/weixin_38145317/article/details/89497616