Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在图片中绘制对角线的算法_C++_Algorithm_Image_Geometry_Diagonal - Fatal编程技术网

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()