我正在阅读此post,以使用 Window window(720, 720, "Window");
Shader shader("shader.vert", "shader.frag");
glm::mat4 model = glm::mat4(1.0);
shader.setUniformmat4("model", model);
Renderer* renderer = new Renderer();
std::vector<StaticSprite*> sprites;
sprites.push_back(new StaticSprite(-0.5, -0.5, 0.0, 1.0, 1.0, glm::vec4(1.0, 1.0, 0.0, 1.0), &shader));
while (!window.closed())
{
window.clear();
shader.enable();
double x, y;
window.getMousePosition(x, y);
shader.setUniformvec2("light_pos", glm::vec2((x / window.getWidth()) * 2.0 - 1.0, 1.0 - 2.0 * (y / window.getHeight())));
for (StaticSprite* sprite : sprites)
renderer->submit(sprite);
renderer->flush();
shader.disable();
window.update();
}
return 0;
使用OpenCV
来计算图像的中心。但是我正在尝试计算使用HoughLinesP检测到的对象的中心。 OpenCV有办法做到这一点吗?
这是我要为其计算中心的图像。
找到线段,输出图像如下:
Moments
使用坐标如何计算该图像的中心?如何在这里使用import cv2
import numpy as np
import math
img = cv2.imread("./images/octa.jpg")
b,g,r = cv2.split(img)
smoothed = cv2.GaussianBlur(g, (3,3), 0)
edges = cv2.Canny(smoothed, 15, 60, apertureSize = 3)
lines = cv2.HoughLinesP(edges,1,np.pi/180,35, 30, 20)
print("length of lines detected ", lines.shape)
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(img,(x1,y1),(x2,y2),(255,0,0),2)
print("x1,y1", x1,",",y1, " --- ", "x2,y2", x2,",",y2)
cv2.imshow('detected',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
?
我的一个限制是我不能使用Moments
附带的Contour
方法。
答案 0 :(得分:0)
以下代码与cv2
的{{1}}版本一起使用。
我密切关注opencv docs,它运行良好。
3.3.1
两个注意事项:
import cv2
img = cv2.imread("octa.jpg", 0)
ret,thresh = cv2.threshold(img,100,255,0)
im2, contours, hierachy = cv2.findContours(thresh, 1, 2)
cnt = contours[0]
M = cv2.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
im2 = cv2.cvtColor(im2, cv2.COLOR_GRAY2RGB)
cv2.polylines(im2, cnt, True, (0, 0, 255), 2)
cv2.circle(im2, (cx, cy), 5, (0, 0, 255), 1)
cv2.imshow("res", im2)
添加到0
,否则轮廓查找将不起作用结果:
如果您使用imread
的其他版本,则只需将文档更改为您的版本即可;文档真的很好。
您可能还想稍微模糊图像或进行其他一些预处理,但是在这种情况下,不需要使用图像。
编辑,不带轮廓:
我从this post那里获得了有用的评论,并做了一些修改。这不使用轮廓。它找到线并用它们找到中心
cv2