使用c ++在opencv中将两个RGB图像相乘的问题

时间:2017-03-12 08:23:19

标签: c++ opencv matrix-multiplication

我希望通过其转置将一个图像相乘。我的图片大小是nxm。 我这样做

    for (int k = 0; k < total_images; k++)
{
    Mat img_tp1 = cv::Mat(imgRows, imgCols, CV_32FC1);
    Mat img_tp2 = cv::Mat(imgRows, imgRows, CV_32FC1);

    subtract(img[k], MeanMat, img_tp1);
    img_tp2 = img_tp1 * img_tp2.t();
    std::ostringstream name;
    name << "sub" << k << ".jpg";
    cv::imwrite(name.str(), img_tp2);
}

我面对这个错误

Unhandled exception at 0x000007FEFDB79E5D in Tracking.exe: Microsoft C++ exception: cv::Exception at memory location 0x00000000001E5EE0.

我该怎么做这个乘法?实际上我想计算图像序列的协方差矩阵,所以我需要这个乘法。 感谢。

然后我决定实现我的RGB图像的乘法,我使用这段代码:

        for (int i = 0; i < imgRows; i++)
    {
        for (int j = 0; j < imgRows; j++)
        {
            uchar pix1[3];
            uchar pix2[3];
            uchar pix[3] = { 0, 0, 0 };

            for (int k = 0; k < imgCols; k++)
            {
                img_tp1.at<Vec3b>(i, k) = { pix1[0], pix1[1], pix1[2] };
                img_tp1.at<Vec3b>(j, k) = { pix2[0], pix2[1], pix2[2] };
                CovMat0.at<Vec3b>(i, j) = { pix[0], pix[1], pix[2] };
                pix[0] = (pix1[0] * pix2[0]) + pix[0];
                pix[1] = (pix1[1] * pix2[1]) + pix[1];
                pix[2] = (pix1[2] * pix2[2]) + pix[2];
                CovMat0.at<Vec3b>(i, j) = { pix[0], pix[1], pix[2] };
            }
        }
    }

但需要花费大量时间来处理它。那有更好的方法吗? (我希望通过其转置将一个图像相乘)

0 个答案:

没有答案