簡體   English   中英

我如何計算 cv::Mat 的步幅

[英]how do I calculate the stride for a cv::Mat

我想知道如何計算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();

您可以使用步驟

step – 每個矩陣行占用的字節數

int n_bytes_for_each_row = mat.step;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM