/*
Mat数据类型指针ptr的使用
cv::Mat image = cv::Mat(400, 600, CV_8UC1); //宽400,长600
uchar * data00 = image.ptr<uchar>(0); data00是指向image第一行第一个元素的指针。
uchar * data10 = image.ptr<uchar>(1); data10是指向image第二行第一个元素的指针。
uchar * data01 = image.ptr<uchar>(0)[1]; data01是指向image第一行第二个元素的指针。
image.ptr(1);指的不是image中第二个像素,而是第一行第二个像素的指针。
使用上面的代码举例:image有400行,有400*600个像素。假设现在你想得到第3行第42个像素的指针,如果你写成:
uchar * data = image.ptr<uchar>(3*image.cols + 41);
1 这样写是错误的,会出现上面的错误。你得到的不是第3行第42个像素的指针,而是第(3×image.cols + 41)行第0个像素的指针,因为没有(3×image.cols + 41)行,所以没有这个指针,所以错误。
正确的写法:
uchar * data = image.ptr<uchar>(3)[41];
1 所以要注意这一点:如果程序可以正常编译,但是运行时出错,很有可能是你给指针赋值的时候,索引值溢出指定范围,指针乱指,导致程序跑偏,所以只有在运行时才能发现错误。
*/
int CPicShowDlg::getColSum(Mat
数字分割 C++ OPENCV
最新推荐文章于 2022-05-12 12:53:33 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)