图像背景比较复杂
把正和斜的图片放在两个类中,用深度学习的方法来训练。
应该可以,对照对象是中间那条铁条。
如果图像都是这样的话 阈值分割 找到黑色的左右边界坐标,然后判断最上面的点和最下面的点x轴的差异
目前我已经试过阈值分割加直线检测的方式计算倾斜 但是效果并不是很好没法准确定位黑色边界
关于深度学习方式效果也不是很好 很难区分角度倾斜比较小的物体
有没有彩色的,这两个不好分也。
斜的,分成这样:
加 contour:
现在是怎么找角。
你们认为只是找左上和左下够不够?拉一条线。
现在好多了,求四点。
怎么计算角度?
忘了,拿本中学数学看看。
左上 1, 左中 2, 左下3, 右中 4
tan A = m (坡度)= (y2 - y1) / (x2 - x1)
线13坡度: m13 = (y3 - y1) / (x3 - x1) = (p3[1] - p1[1]) / (p3[0] - p1[0]),
线24坡度: m24 = (y4 - y2) / (x4 -x2) = (p4[1] - p2[1]) / (p4[0] - p2[0]),
两线夹角Z:tan Z = | (m2 - m1) / ( 1+m1m2) |
两线夹角:tanZ = abs( (m24 - m13) / (1 + m24*m13) )
def getAngle(p1, p2, p3, p4):
m13 = (p3[1] - p1[1]) / (p3[0] - p1[0])
m24 = (p4[1] - p2[1]) / (p4[0] - p2[0])
tanZ = abs( (m24 - m13) / (1 + m24*m13) )
return math.atan(tanZ)
答案错误。atan 没用。
忘了加 degrees:return math.degrees( math.atan(tanZ) )
夹角是: 86.22345547864316 < 90,偏约 3.78 度。
text = None
if abs(angleZ - 90) > 2:
text = "垂直: 否"
img = cv2ImgAddText(img, text, 40, 920, (255, 255, 0), 60)
else:
text = "垂直: 是"
img = cv2ImgAddText(img, text, 140, 60, (255, 255, 0), 30)
差两度合适吗?
两副图尺寸为什么不一样?
调了一下,两幅图都可以测。Thresh 值是 30。斜的那个变成缺腿的。
请问在检测到边缘之后,图中标注的那些点是怎么得到的?
还有请问这个阈值30是如何得到的
_, thresh = cv2.threshold(gray, trackbar_val, 255, cv2.THRESH_BINARY_INV)
trackbar 你应该会了。
contour:
cnts, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
面积:
area = cv2.contourArea(cnt)
保大的,不要小的。
交叉点:
approx = cv2.approxPolyDP(cnt, 0.009 * cv2.arcLength(cnt, True), True) n = approx.ravel() i = 0 for j in n: if i % 2 == 0: x = n[i] y = n[i + 1]
x 和 y 都有了。
trackbar 文章: https://editor.csdn.net/md/?articleId=113362767
发错了,这个你才能看: https://blog.csdn.net/fly_bear_unknown/article/details/113362767
这是上一集:https://blog.csdn.net/fly_bear_unknown/article/details/112265085
请点评点评,谈谈那里可以搞笑的地方。