1、对列表进行排序,四边形顶点坐标排序
def takeSecond00(elem): # 按照列表第一个元素排序
return elem[0]
def takeSecond(elem): # 按照列表第二个元素排序
return elem[1]
def takeSecond1(elem): # 按照列表元素和排序
return elem[1]+elem[0]
#先判断第一个和对角线,然后左下 右上四边形四个点排序,顺序 左上,左下,右上、右下
def sort_point(list1):
list1.sort(key=takeSecond1)
t0=list1[0]
t1=list1[-1]
list1.remove(t0)
list1.remove(t1)
list1.sort(key=takeSecond00)
list1.insert(0, t0)
list1.append(t1)
return list1
#以上函数,输入输出都是为列表
list1=sort_point(pp)
2、显示图片,画线、画点功能
#划线
cv2.drawContours(img_gray1,contours,-1,(0,255,0),3)
#显示坐标点
for jx in repoint:
for ja in jx:
cv2.circle(img_resize1, (ja[0] ,ja[1]), 1, (0, 0, 255), thickness=2)
#显示图片
cv2.imshow("dst",img_resize1)
cv2.waitKey(7000)
cv2.destroyAllWindows()
3、点集合之间的距离计算
from scipy.spatial.distance import cdist
# disp the point
for con in cons:
dist=cdist(con[:,0,:],con[:,0,:],metric='euclidean')
index_0=np.argmax(dist[0], axis=0)
index_1=np.argmax(dist[-1], axis=0)
point0=con[index_0,0,:]
point1=con[index_1,0,:]
point.append([con[0,0,:],con[-1,0,:],point0,point1])
4、OpenCV读取图片 转灰度 分割等操作、生成最小矩阵等
mat_img = cv2.imread(path)
[height,width,c]= mat_img.shape
img_resize1 = cv2.resize(mat_img,(int(width*0.3),int(height*0.3)),interpolation=cv2.INTER_CUBIC)
img_gray = cv2.cvtColor(img_resize1,cv2.COLOR_RGB2GRAY)
img_gray1=img_gray[80:614,170:564]
ret,dst1 = cv2.threshold(img_gray1,60,200,cv2.THRESH_BINARY_INV)
contours,heridency = cv2.findContours(dst1,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
#生成最小矩阵
for i in range(len(contours)):
conhull=cv2.convexHull(contours[i])
if cv2.contourArea(conhull, True)>min_size:
rect = cv2.minAreaRect(conhull)
box1 =cv2.boxPoints(rect)
box = np.int0(box1)
cons.append(conhull)
bbox.append(box)
5、缩放 和 压缩图片代码
import os
import cv2
path = 'train_data/mindata2/train_label/'
path1 = 'train_data/mindata2/train_label_resize_0.5/'
# os.access(path+'0002-01.jpg', os.F_OK)
filelist = os.listdir(path)
for item in filelist:
if item:
src = os.path.join(os.path.abspath(path),item)
img = cv2.imread(src)
res=cv2.resize(img,(int(0.5*img.shape[1]),int(0.5*img.shape[0])))
# cv2.imwrite(path1+item, img, [int(cv2.IMWRITE_JPEG_QUALITY), 50])
print(item)
try:
cv2.imwrite(path1+item, res)
except:
continue
5添加高斯噪声和椒盐噪声
import numpy as np
import matplotlib.pyplot as plt
import cv2
from skimage import util
img = cv2.imread('mask_rcnn_coco.png')
img = np.array(img)
noise_gs_img = util.random_noise(img,mode='gaussian',mean=0, var=5)
# noise_salt_img = util.random_noise(img,mode='salt')
# noise_pepper_img = util.random_noise(img,mode='pepper')
# noise_sp_img = util.random_noise(img,mode='s&p')
# noise_speckle_img = util.random_noise(img,mode='speckle')
cv2.imshow("dst",img)
cv2.imshow("dst1",noise_gs_img)
cv2.waitKey(7000)
cv2.destroyAllWindows()
6、OpenCV 腐蚀膨胀操作
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.dilate(binary, kernel)
dst = cv.erode(binary, kernel)
欢迎大家留言交流