我想知道如何计算cv:Mat的步幅;
我更新了代码,需要计算步幅,但我不知道计算投影变换有什么问题。我得到一个cv :: Mat,然后将其复制到unsigned int数组,然后对其进行转换,然后取回一个cv :: Mat进行显示。
cv::Mat3b srcIm;
srcIm = imread("15016889798859437.jpg");
cv::Mat3b srcIm, edges;
srcIm = imread("Lenna.png");
image_t src, dst;
int n_bytes_for_each_row = srcIm.step;
src.width = srcIm.rows;
src.height = srcIm.cols;
src.stride = n_bytes_for_each_row;
dst.width = 350;
dst.height = 350;
dst.stride = n_bytes_for_each_row;
dst.pixels = new unsigned int[350*350];
std::unique_ptr<unsigned int[]> videoFrame(new unsigned int[srcIm.rows * srcIm.cols]);
std::transform(srcIm.begin(), srcIm.end(), videoFrame.get()
, [](cv::Vec3b const& v) {
return v[0] | (v[1] << 8) | (v[2] << 16);
});
vertex_t vert[4];
vert[0].u = 0;
vert[0].v = 0;
vert[0].x = 0;
vert[0].y = 0;
vert[1].u = 50;
vert[1].v = 0;
vert[1].x = 350;
vert[1].y = 0;
//
vert[2].u = 150;
vert[2].v = 350;
vert[2].x = 350;
vert[2].y = 350;
//
vert[3].u = 0;
vert[3].v = 50;
vert[3].x = 0;
vert[3].y = 350;
src.pixels = videoFrame.get();
perspective_transform(&src, &dst, vert);
cv::Mat videoFrameMat(350, 350, CV_32S, dst.pixels);
double min;
double max;
cv::minMaxIdx(videoFrameMat, &min, &max);
cv::Mat adjMap;
cv::convertScaleAbs(videoFrameMat, adjMap, 255 / max);
cv::imshow("Out", adjMap);
cv::waitKey();
Run Code Online (Sandbox Code Playgroud)
您可以使用以下步骤:
步骤 –每个矩阵行占用的字节数
int n_bytes_for_each_row = mat.step;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4008 次 |
| 最近记录: |