基于3D阵列创建2D阵列的最有效方法是什么?我有以下输入3D数组,它对图片的rgb信息进行编码:
[255255],[255255],[255255],…]
我想创建一个新的2D阵列,它本质上是一个遮罩,检查rgb值是否超过某个阈值:
[true,false,true,false,…]
当我对每个rgb值进行操作时,我正在执行一系列乘法、加法和SQRT,此操作的最终值确定2D数组输出的值,为真或假
提前谢谢
编辑: 我正在尝试将C++代码转换为Python:
cv::Mat diffImage;
cv::absdiff(backgroundImage, currentImage, diffImage);
cv::Mat foregroundMask = cv::Mat::zeros(diffImage.rows, diffImage.cols, CV_8UC1);
float threshold = 30.0f;
float dist;
for(int j=0; j<diffImage.rows; ++j)
for(int i=0; i<diffImage.cols; ++i)
{
cv::Vec3b pix = diffImage.at<cv::Vec3b>(j,i);
dist = (pix[0]*pix[0] + pix[1]*pix[1] + pix[2]*pix[2]);
dist = sqrt(dist);
if(dist>threshold)
{
foregroundMask.at<unsigned char>(j,i) = 255;
}
}
我想你要找的是
更好的办法是写:
因为平方阈值比求数组中每个元素的平方根要快
我认为您也可以使用
axis=-1
,这样它总是沿着最后一个轴求和,而不管数组的维数如何@MichaelChang提醒我
sum
既是一个函数也是一个方法。这可以更简单地改写为:相关问题 更多 >
编程相关推荐