我需要创建两个图像的差异图像,并希望有每个像素的差异的大小/长度
我目前正在这样做:
cv::Mat diff = cv::abs(img1 - img2);
cv::Mat diffLen(diff.size(), CV_32FC1);
for(int x = 0; x < diff.size().width; ++x)
    for(int y = 0; y < diff.size().height; ++y)
    {
        float d = cv::norm(diff.at<Vec3f>(Point(x,y)));
        diffLen.at<float>(Point(x,y)) = d;
    }有没有更方便的方法来做这件事?
发布于 2020-07-18 15:43:55
我正在寻找一个类似的目的,现在我得到了:
    cv::Mat diff = cv::abs(img1 - img2);
    diff = diff.mul(diff);
    cv::transform(diff, diff, cv::Mat::ones(1, diff.channels(), CV_32F));
    cv::sqrt(diff, diff);这并不优雅。但是opencv似乎并没有提供“像素标准”操作。
发布于 2016-11-02 16:42:52
也许你可以使用ParallelLoopBody:
class ParallelNorm : public ParallelLoopBody
{
private:
    Mat &diff;
    Mat &diffLen;
public:
    ParallelNorm(Mat& pDiff,Mat &result) :
        diff(pDiff),
        diffLen(result)
        {}
    virtual void operator()(const Range& range) const
    {
        for (int x = range.start; x < range.end; ++x)
        {
            for (int y = 0; y < diffLen.rows; ++y)
            {
                float d = cv::norm(diff.at<Vec3f>(Point(x, y)));
                diffLen.at<float>(Point(x, y)) = d;
            }
        }
    }
};而不是使用你的循环
ParallelNorm x(diff,diffLen);
parallel_for_(Range(0,diff.cols),x);在循环中,如果你交换x和y,你可以使用指针...
https://stackoverflow.com/questions/40366034
复制相似问题