ken*_*yzx 2 opencv image-processing remap
我想将图像中的每个像素向右移动1px,下面是我用来进行重映射转换的地图.
这种方法需要比进行这种简单转换所需的时间更多的时间.我可以使用cv功能吗?或者我只是将图像分成2个图像,一个是src.cols-1像素宽,另一个是1像素宽,然后将它们复制到新图像?
void update_map()
{
for( int j = 0; j < src.cols; j++ ){
for( int i = 0; i < src.rows; i++ ){
if (j == src.cols-1)
mat_x_Rotate.at<float>(i,j) = 0;
else
mat_x_Rotate.at<float>(i,j) = j + 1;
mat_y_Rotate.at<float>(i,j) = i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以采取哪些措施来改善绩效:
Mat
以行主顺序存储,因此首先迭代列非常缓存不友好)Mat::ptr()
直接访问同一行中的像素,作为C风格的数组.(这是一个很大的性能赢得使用at<>()
,这可能会像每次访问的检查索引一样)if
语句从内循环中取出,并0
单独处理列.作为替代方案:是的,将图像分成几部分并复制到新图像可能与直接复制一样有效,如上所述.
归档时间: |
|
查看次数: |
4938 次 |
最近记录: |