python - 如何使用python在open cv中扩展线段

标签 python c++ algorithm python-2.7 opencv

我有一条线段的两个端点,我想延长这条线。 我通过这个网站找到了以下算法

          lengthAB = sqrt((a.x - b.x)^2 + (a.y - b.y)^2) 
          c.x = b.x + (b.x - a.x) / lengthAB * length;
          c.y = b.y + (b.y - a.y) / lengthAB * length;

但是当我在程序上实现它时我无法获得输出。我需要 int 值,但 cx 和 cy 是 float 。

![ a(x,y)=(200,140) , b(x,y)=(232,146) ][1]

  import numpy as np
  import cv2
  import math
  img = np.zeros((500,500,3), np.uint8)
  lenab = math.sqrt((200-232)**2+(158-146)**2)
  length = 100
  cx = 232 + (232-200) / lenab*length
  cy = 146 + (146-158) / lenab*length
  cv2.line(img,(200,158),(cx,cy),(33,322,122),3)
  cv2.imshow('Tha',img)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

我的o/p屏幕:

      Traceback (most recent call last):
File "E:/Nan/inclined_line.py", line 9, in <module>
cv2.line(img,(200,158),(cx,cy),(33,322,122),3)
TypeError: integer argument expected, got float

最佳答案

分配给“点”变量时转换为 int

A=(100,100 )
B=(200,200 )
C=[200,200 ]
lenAB = math.sqrt(math.pow(A[0] - B[0], 2.0) + math.pow(A[1] - B[1], 2.0))

C[0] =int (B[0] + (B[0] - A[0]) / lenAB * 500)
C[1] = int(B[1] + (B[1] - A[1]) / lenAB * 500)
cv2.line(img,A,tuple(C),Colour_store.blue,1,1)

或在您的代码中。元组转换我真的不记得这是否是#needed,但是“如果它没有损坏”

import numpy as np
import cv2
import math
img = np.zeros((500,500,3), np.uint8)
lenab = math.sqrt((200-232)**2+(158-146)**2)
length = 100

C=[200,200 ]
C[0] =int( 232 + (232-200) / lenab*length)
C[1] = int(146 + (146-158) / lenab*length)
cv2.line(img,(200,158),tuple(C),(33,322,122),3)
cv2.imshow('Tha',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

关于python - 如何使用python在open cv中扩展线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27163398/

相关文章:

python - 如何设置特定长度的特定 faker 随机字符串并使用下划线作为空格?

python - 如何创建多个 TFRecord 文件而不是制作一个大文件然后将其拆分?

python - Flask 不存储 session (缓存)

sql - 在 SQL 中创建一个 "products you may be interested in"算法?

python - n 个数以下素数之和需要解释

用于对 RESTful 路由进行分组的算法

Python Matplotlib -> 给每个 x 轴一个数字标签

c++ - 在macOS Catalina上编译Intel MKL CBLAS示例文件的问题

c++ - 没有光照计算时我应该忽略顶点法线吗?

c++ - 双符号返回类型是什么意思?