#include "highgui.h"
#include "stdlib.h"
#include <iostream>
int main(int argc, char* argv[])
{
float data[18] =
{
1, 2, 3, 4, 5, 6,
2, 3, 4, 5, 6, 7,
3, 4, 5, 6, 7, 8,
};
CvMat mat; // 传函数的时候最好是传指针,要不然会导致内存出问题,还会导致运行的速度非常的慢,
cvInitMatHeader(&mat, 3, 3, CV_32FC2, data); // CV_32FC1 是代表的是32位的单通道的,CV_32FC3是三通道的,
int nChannels = 2; // 这个是两个通道的时候用到,
for (int y = 0; y < mat.rows; y++)
{
float* da = (float*)(mat.data.ptr + y * mat.step); //mat.step代表的是一行的字节数,mat.data.ptr ptr是无符号的字符,
// 将指针转换成float型的指针, 现在指向y行的起始地址,
for (int x = 0; x < mat.cols; x++)
{
// float value = *(da + x); // 这个就是指针的偏移速度是非常的快,比之前的直接取数速度要快的多,
float value[2];
value[0] = *(da + x*nChannels); // 这是指针指向的第一个数因为这是2个通道. 这个数据是第y行的起始数据,
value[1] = *(da + x*nChannels + 1); // 这是指针指向的第二个数,这个就是第y行的第二个数据,
std::cout << "(" << value[0] << " " << value[1] << ")"<< " ";
}
std::cout << std::endl;
}
return 0;
}
传指针到数据,用指针显示数据
最新推荐文章于 2022-12-22 18:02:55 发布