例
如果效率很重要,那么迭代cv::Mat对象中的像素的快速方法是使用其ptr(int r)方法来获得指向行r (从0开始的索引)的开头的指针。
根据矩阵类型,指针将具有不同的模板。对于CV_8UC1 : uchar* ptr = image.ptr(r);
对于CV_8UC3 : cv::Vec3b* ptr = image.ptr<:vec3b>(r);
对于CV_32FC1 : float* ptr = image.ptr(r);
对于CV_32FC3 : cv::Vec3f* ptr = image.ptr<:vec3f>(r);
然后,通过调用ptr[c]可以使用该ptr对象访问行r和列c上的像素值。
为了说明这一点,这里有一个例子,我们从磁盘加载图像并反转其蓝色和红色通道,逐个像素地操作:#include
#include
#include
int main(int argc, char** argv) {
cv::Mat image = cv::imread("image.jpg", CV_LOAD_IMAGE_COLOR);
if(!image.data) {
std::cout << "Error: the image wasn't correctly loaded." << std::endl;
return -1;
}
// We iterate over all pixels of the image
for(int r = 0; r < ima