【问题标题】:Using opencv's ptr pointer to manipulate pixels使用opencv的ptr指针来操作像素
【发布时间】:2018-07-31 14:10:31
【问题描述】:

我使用 opencv 读取图片并分割图像。 分割矩阵:

  1. 奇数行是奇数列作为A矩阵;
  2. 奇数行被均匀列为 B 矩阵;
  3. 奇数行被均匀列为 C 矩阵;
  4. 偶数偶数列是 D 矩阵;

我的代码:

void SplitMat(Mat& src, Mat& objA, Mat& objB, Mat& objC, Mat& objD) {
// src:  Input image,  CV_16UC1
// objA: Output image, CV_16UC1
// objB: Output image, CV_16UC1
// objC: Output image, CV_16UC1
// objD: Output image, CV_16UC1

Mat dst;
src.copyTo(dst);
int row, col, i, j;
for (row = 0, i = 0; row < dst.rows - 1; row = row + 2, ++i) {
    ushort* temp0 = dst.ptr<ushort>(row);
    ushort* temp1 = dst.ptr<ushort>(row + 1);
    ushort* obja = objA.ptr<ushort>(i);
    ushort* objb = objB.ptr<ushort>(i);
    ushort* objc = objC.ptr<ushort>(i);
    ushort* objd = objD.ptr<ushort>(i);
    for (col = 0, j = 0; col < dst.cols - 1; col = col + 2, ++j) {
        obja[j] = temp0[col];
        objb[j] = temp0[col + 1];
        objc[j] = temp1[col];
        objd[j] = temp1[col + 1];
    }
}

}

测试结果

不知道为什么x方向的图像变成了两个图像。

请指导我们。这是逻辑错误还是其他?谢谢

【问题讨论】:

  • 可能是因为您在不同的步骤中迭代了 2 个图像?你能说明你在那里做什么以及你想达到什么目标吗?你不只使用一个迭代变量吗?
  • 我只是想尝试测试偏振热成像的理论模型。该模型需要分割原始(偏振)图像进行分析。
  • 如果可以的话,用CV_8UC1代替CV_16UC1解决问题
  • 您能解释一下如何从每个像素/元素的角度进行拆分(一行的小例子)吗?您仍然需要说明输入-输出参数是如何初始化的。您能否分享这部分代码,可能在调用SplitMat 之前不久。

标签: opencv


【解决方案1】:

我知道这个问题的原因。由于读取的图片是8位,而程序使用的是16位。 uchar -&gt; ushort有问题。

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2020-04-28
    • 2021-04-06
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多