莫尔条纹的测量,基于pycharm下,OpenCV

  • Post author:
  • Post category:其他


简单的小程序,将莫尔条纹提取,测量两直线的像素点。

import cv2 as cv

from matplotlib import pyplot as py

from skimage import morphology

import numpy as np

from matplotlib import pyplot as plt

src=cv.imread(‘D:/pyziliao/tuxiangku/zhixianjuli.png’)

cv.imshow(‘src1’, src)

cv.waitKey(0)

cv.destroyAllWindows()

gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)

ret, binary = cv.threshold(gray,127,255,cv.THRESH_BINARY)

cv.imshow(‘binary’, binary)

cv.waitKey(0)


contours, hierarchy = cv.findContours(binary,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)#contours图像轮廓坐标,是一个链表

h,w = binary.shape

print(len(contours),hierarchy)

[vx,vy,x0,y0] = cv.fitLine(contours[0], cv.DIST_L2,0,0.01,0.01) # param 距离参数,0就好,自动选择最好的

print([vx,vy,x0,y0])   #拟合结果为一个四元素的容器, (vx, vy, x0, y0)。其中(vx, vy) 是直线的方向向量,(x0, y0) 是直线上的一个点。

k = vy / vx          # #如果直线用 y=kx+b 来表示,那么 k = vy/vx,b = y0 – k * x0。

#  reps ,aeps 用于表示拟合直线所需要的径向,角度 精度,通常 设置为0.01返回值是共线的归一化向量

b = int((-x0*k) + y0)

print(b)

print(k)

# 说白了就是一个方向和一个点,点斜式

y = int(((w-x0)*k)+y0)

print(y)                   # 计算两个点,代值计算就行

#cv.line(src,(int(x0),int(y0)),(0,b),(0,255,0),2)#画线函数

cv.line(src,(w,y),(0,b),(0,255,0),2)#画线函数

cv.imshow(“result1”,src)

cv.waitKey()

cv.destroyAllWindows()

[vx1,vy1,x01,y01] = cv.fitLine(contours[1], cv.DIST_L2,0,0.01,0.01) # param 距离参数,0就好,自动选择最好的

print([vx1,vy1,x01,y01])   #拟合结果为一个四元素的容器, (vx, vy, x0, y0)。其中(vx, vy) 是直线的方向向量,(x0, y0) 是直线上的一个点。

k1 = vy1 / vx1

#  reps ,aeps 用于表示拟合直线所需要的径向,角度 精度,通常 设置为0.01返回值是共线的归一化向量,和线上一点

b1 = int((-x01*k1) + y01)

print(b1)

print(k1)

# 说白了就是一个方向和一个点,点斜式嘛,还啥vec4f,,讲究

y1 = int(((w-x01)*k1)+y01)

print(y1)                   # 计算两个点,代值计算就行

#cv.line(src,(int(x01),int(y01)),(0,b1),(0,0,255),2)#画线函数

cv.line(src,(w,y1),(0,b1),(0,0,255),2)#画线函数

cv.imshow(“result2”,src)

cv.waitKey()

cv.destroyAllWindows()

cv.circle(src, (int(x0),int(y0)), 1, (255,0,0),2)

cv.circle(src, (int(x01),int(y01)), 1, (255,0,0),2)

cv.imshow(“point”,src)

cv.waitKey()

dis=np.sqrt((x0-x01)**2+(y0-y01)**2)

print(dis)

print(x0,y0,x01,y01,h,w)



版权声明:本文为xiaoqiuqiuyaha原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。