赞
踩
pip install opencv-contrib-python==3.4.3.18
#读取图片
img_path = "img.jpg"
img = cv.imread(img_path) #BGR
#写入图片
cv.imwrite("img.png", img)
注,在读取操作时,PIL的Image.open函数读取的通道为RGB,速度比cv.read快。
import cv2
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转灰度图
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) #找出轮廓点
cv2.drawContours(img,contours,-1,(0,0,255),3) #绘制轮廓
cv2.imshow("img", img)
cv2.waitKey(0)
注,opencv2和opencv3的版本不同,findContours的输出会有不同,稍微注意一下
#cv2.circle
#2个参数为圆心位置, 3个参数为半径,4个参数为颜色
cv2.circle(img, (int(coords[0]),int(coords[1])), 3, (0,0,255), -1)
#cv2.putText()
#2个参数为要写的文字, 3个参数为位置,4个参数为字体,
for i in range(len(edge_points)):
cv2.putText(img, str(i), (int(edge_points[i][0]),int(edge_points[i][1])), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)
参考:Thin Plate Spline (薄板样条函数)(TPS)
参考:刚性变换、仿射变换、透视变换和非线形变换
参考:图像处理的仿射变换与透视变换
放射变换(线性变换)是2维空间,给定3个点,可以映射;只能是刚性变换,比如平移,翻转,裁剪;
透视变换(线性变换)是3维空间,给定4个点,可以映射;
tps插值的话是非刚性形变,相对自然,可以输入多个点,去插值;比如给定原始形状的有限点集A,变形后的对应目标点集B,设C=B-A,对(Ax,Ay, Cx)拟合出一个TPS,就可以得到x方向的内插函数;对(Ax,Ay, Cy)拟合出来的TPS则可以得到y方向的内插函数。这样一以来对于不在点集中的点,我们就可以插值得到目标点。从而完成整个面的变形。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。