【发布时间】:2018-07-31 14:10:31
【问题描述】:
我使用 opencv 读取图片并分割图像。 分割矩阵:
- 奇数行是奇数列作为A矩阵;
- 奇数行被均匀列为 B 矩阵;
- 奇数行被均匀列为 C 矩阵;
- 偶数偶数列是 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