优化一下这段代码else if(directionFlag == DIRECTION_FLAG1::RIGHT) { for (int var = p0.x; var < p1.x; var++) { float x = var; float y =0; if(var<0) { x = 0; } else if(var>inputImg.rows) { x = inputImg.rows; } if(k!=0) { y = k * x + b; } else if(k==0) { y = p0.y; } int data = inputImg.ptr<uchar>(int (y))[int(x)]; PointX.push_back(x); PointY.push_back(y); Gray.push_back(data); } } else if(directionFlag == DIRECTION_FLAG1::LEFT) { for (int var = p1.x; var < p0.x; var++) { float x = var; float y =0; if(var<0) { x = 0; } else if(var>inputImg.rows) { x = inputImg.rows; } if(k!=0) { y = k * x + b; } else if(k==0) { y = p0.y; } int data = inputImg.ptr<uchar>(int (y))[int(x)]; PointX.push_back(x); PointY.push_back(y); Gray.push_back(data); } }
时间: 2023-05-12 11:06:33 浏览: 107
这段代码可以进行如下优化:
1. 在判断 x 是否越界时,应该使用 inputImg.cols 而不是 inputImg.rows。
2. 在循环中,var 的增量应该为 1,而不是空着不写。
3. 在计算 y 坐标时,可以将 k * x 和 b 分别计算出来,然后再相加,这样可以减少重复计算。
4. 可以将两个 if(k!=0) 和 if(k==0) 合并成一个 if-else 语句。
优化后的代码如下:
else if(directionFlag == DIRECTION_FLAG1::RIGHT) { for (int var = p0.x; var < p1.x; var++) { float x = var; float y = 0; if(x < 0) { x = 0; } else if(x > inputImg.cols) { x = inputImg.cols; } y = k * x + b; int data = inputImg.ptr<uchar>(int (y))[int(x)]; PointX.push_back(x); PointY.push_back(y); Gray.push_back(data); } } else if(directionFlag == DIRECTION_FLAG1::LEFT) { for (int var = p1.x; var < p0.x; var++) { float x = var; float y = 0; if(x < 0) { x = 0; } else if(x > inputImg.cols) { x = inputImg.cols; } y = k * x + b; int data = inputImg.ptr<uchar>(int (y))[int(x)]; PointX.push_back(x); PointY.push_back(y); Gray.push_back(data); } }
阅读全文