void QuickDemo::pixel_visit_demo(Mat& image) { int w = image.cols; //获得图像的宽 int h = image.rows; //获得图像的高 int dims = image.channels(); //获得图像通道的数量 //for (int row = 0; row < h; row++) //{ // for (int col = 0; col < w; col++) // { // if (dims == 1) //灰度图像 // { // int pv = image.at<uchar>(row, col); //获得像素数值 // image.at<uchar>(row, col) = 255 - pv; //重新赋值 // } // else //彩色图像 // { // Vec3b bgr = image.at<Vec3b>(row, col); // image.at<Vec3b>(row, col)[0] = 255 - bgr[0]; // image.at<Vec3b>(row, col)[1] = 255 - bgr[1]; // image.at<Vec3b>(row, col)[2] = 255 - bgr[2]; // } // } //} for (int row = 0; row < h; row++) { uchar* current_row = image.ptr<uchar>(row); //获取当前行的指针 for (int col = 0; col < w; col++) { if (dims == 1) //灰度图像,一个通道 { int pv = *current_row; //获得像素数值 *current_row++ = 255 - pv; //重新赋值 } else //彩色图像, 三个通道 { *current_row++ = 255 - *current_row; *current_row++ = 255 - *current_row; *current_row++ = 255 - *current_row; } } } imshow("像素读写演示", image); }