【问题标题】:C++ code conversion of MatMat的C++代码转换
【发布时间】:2014-05-11 19:11:07
【问题描述】:

我正在尝试将this second answer 代码转换为 c++,我所做的并没有给我适当的结果,这是我的代码:

{
Mat img = imread("messi5.jpg");
int level_n = 2;
Mat p = Mat::zeros(img.cols*img.rows, 3, CV_32F);
vector<Mat> bgr;
    cv::split(img, bgr);
    //Divide each pixel color with 127 for level 2
    for(int i=0; i<img.cols*img.rows; i++) {
        p.at<float>(i,0) = bgr[0].data[i] / 127.0;
        p.at<float>(i,1) = bgr[1].data[i] / 127.0;
        p.at<float>(i,2) = bgr[2].data[i] / 127.0;
    }
vector<Mat> Img2 = p[bgr];
Mat out;
cv::transform(img,out,p);
imshow ("output" , out);
}

我不明白的是,我如何将这些除以 127 的颜色放入 Matrix 中,我哪里出错了?

我正在尝试的其他方式是

vector<Mat> bgr;
Mat blue , green , red;
    cv::split(img, bgr);
    blue = bgr[0]/127.0;
    if (blue > 128)
    {
        blue = 255;
    }
    else
    {
        blue = 0;
    }

红色和绿色相同

【问题讨论】:

  • “我不明白的是我如何将这些颜色除以 127 放入矩阵中”,到哪个矩阵?,你的意思是vector&lt;Mat&gt; Img2
  • 不,我的意思是该图像上的这些值,当您访问我提到的链接时,您可能会更好地理解

标签: c++ image opencv image-processing computer-vision


【解决方案1】:

为什么不就地执行(对于第 2 级):

Mat img = imread("messi5.jpg");
for(int i=0;i<img.rows;i++)
    for(int j=0;j<img.cols;j++) {
        cv::Vec3b p = img.at<cv::Vec3b>(i,j);
        for(int k = 0;k < img.channels();k++)
             p[k] = p[k] > 127 ? 255 : 0;
        img.at<cv::Vec3b>(i,j) = p;
}
// do whatever you want with processed image img

【讨论】:

  • 我想在 8UC4 图像上应用相同的东西,在 8UC4 中输入,输出也是 8UC4,我在 android (android ndk) 中使用带有 java 的 opencv,我将 Vec3b 更改为 Vec4b 但仍然没有输出,需要改变什么?
  • @Munieb 这应该不是问题。您能否详细描述一下您将 Vec3b 更改为 Vec4b 时遇到的问题?
  • 它只是没有显示输出,但我以另一种方式进行
猜你喜欢
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多