灰度图像获取像素值
int pixelval = image.at<uchar>(row, col);
彩色图像获取像素值
Vec3b bgr = image.at<Vec3b>(row, col);//获取像素值
获取每行的指针
uchar* current_row = image.ptr<uchar>(row);
遍历像素并修改
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat hsv;
Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/1.jpg");
if (image.empty()) {
printf("could not input ..");
return -1;
}
for (int row = 0; row < image.rows; row++) {
for (int col = 0; col < image.cols; col++) {
if (image.channels() == 1) {
int pixelval = image.at<uchar>(row, col);
image.at<uchar>(row, col) = 255 - pixelval;
}
if (image.channels() == 3) {//彩色图像
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];
}
}
}
//or 指针
for (int row = 0; row < image.rows; row++) {
uchar* current_row = image.ptr<uchar>(row);
for (int col = 0; col < image.cols; col++) {
if (image.channels() == 1) {
int pixelval = *current_row;
*current_row++ = 255 - pixelval;
}
if (image.channels() == 3) {//彩色图像
*current_row++ = 255 - *current_row;
*current_row++ = 255 - *current_row;
*current_row++ = 255 - *current_row;
}
}
}
imshow("图像像素显示", image);
waitKey(0);
destroyAllWindows();
return 0;
}