C++ 在图片中绘制对角线的算法
我需要在图片上画出最接近主对角线的东西(不规则矩阵)。 我已经知道,对于常规格式,格式如下:C++ 在图片中绘制对角线的算法,c++,algorithm,image,geometry,diagonal,C++,Algorithm,Image,Geometry,Diagonal,我需要在图片上画出最接近主对角线的东西(不规则矩阵)。 我已经知道,对于常规格式,格式如下: for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { if(i==j){ matrix[row][column] = color_of_diagonal; } } } (i=0;i
for (i = 0; i < row; i++) {
for (j = 0; j < column; j++) {
if(i==j){
matrix[row][column] = color_of_diagonal;
}
}
}
(i=0;i{
对于(j=0;j
但将其调整为矩形显然是不同的。。。
我看到一些笔记算法,但我不太了解他们的工作。有人能帮我吗
附言:如果能解释一种在图像上画多条“对角线”的方法,那就太酷了,但这不是主要问题。首先,你能使用像OpenCV这样的库吗?如果是这样,那么
# you need to convert this python code to c++. Should not be that difficult
r, c = matrix.shape[:2]
cv2.line(matrix,(0,0), (c-1, r-1), color= color_of_diagonal)
否则,您需要执行一些插值或类似锯齿线的操作
# c++ code here, I am rusty a bit (we know that matrix is r rows, c cols.)
aspect = (float)c/r
for (int i = 0; i < r; i++)
matrix[i][(int)(aspect*i)] = color_of_diagonal
图像为100*137
时的另一个图像(有点任意)
另外,请注意,复杂性非常低,它是O(r)
,其中r
是行数,而您的代码将O(r*c)
您应该查看算法。您发布的代码用颜色填充整个图像。不管怎样,你正在寻找bresenham的步进算法。你是对的,我会修正你确定要实现图形原语吗?您是否使用任何图形子系统来提供这些功能?在正方形示例中使用两级循环看起来过于复杂,当然效率低下<(i=0;i就可以了。此外,我认为在索引矩阵时使用row
和column
而不是I
和j
是一种打字错误。
r, c = 100, 200
mat = np.zeros((r, c))
aspect = c/r
for i in range(10):
mat[i, int(i*aspect)]=255
import matplotlib.pyplot as plt
plt.imshow(mat)
plt.show()