1、读写图像
int main() {
Mat src, gray_src;
src = imread("F:\\opencv_work\\05读写图像像素修改像素值\\Project1\\27.jpg");
// if (src.empty())
//{
// cout << "can not find image" << endl;
// return -1;
//}
namedWindow("总舵主的自画像", WINDOW_AUTOSIZE);
imshow("总舵主的自画像", src);
2、读写像素
heights = src.rows;
weights = src.cols;
int nc = src.channels();
for (int row = 0; row < heights; row++) {
for (int col = 0; col < weights; col++)
}
3、修改像素值
单通道反差处理
for (int row = 0; row < heights; row++) {
for (int col = 0; col < weights; col++) {
int gray = gray_src.at<uchar>(row, col);
gray_src.at<uchar>(row, col) = 255 - gray;
}
}
多通道反差处理
heights = src.rows;
weights = src.cols;
int nc = src.channels();
for (int row = 0; row < heights; row++) {
for (int col = 0; col < weights; col++) {
if (nc == 1) {
int gray = gray_src.at<uchar>(row, col);
gray_src.at<uchar>(row, col) = 255 - gray;
}
else if(nc == 3){
int b = dst.at<Vec3b>(row, col)[0];
int g = dst.at<Vec3b>(row, col)[1];
int r = dst.at<Vec3b>(row, col)[2];
dst.at<Vec3b>(row, col)[0] = 255 - b;
dst.at<Vec3b>(row, col)[1] = 255 - g;
dst.at<Vec3b>(row, col)[2] = 255 - r;
相关API
bitwise_not直接实现发差处理
4、实现代码
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
int main() {
Mat src, gray_src;
src = imread("F:\\opencv_work\\05读写图像像素修改像素值\\Project1\\27.jpg");
// if (src.empty())
//{
// cout << "can not find image" << endl;
// return -1;
//}
namedWindow("总舵主的自画像", WINDOW_AUTOSIZE);
imshow("总舵主的自画像", src);
cvtColor(src, gray_src, COLOR_BGR2GRAY); //三通道转单通道
namedWindow("总舵主的灰度像", WINDOW_AUTOSIZE);
imshow("总舵主的灰度像", gray_src);
int heights = gray_src.rows;
int weights = gray_src.cols;
//单通道图像反差处理
for (int row = 0; row < heights; row++) {
for (int col = 0; col < weights; col++) {
int gray = gray_src.at<uchar>(row, col);
gray_src.at<uchar>(row, col) = 255 - gray;
}
}
//怎么样去读取新的通道的值
////三通道图像反差处理
Mat dst;
//dst.create(src.size(), src.type());
dst = src.clone();
heights = src.rows;
weights = src.cols;
int nc = src.channels();
for (int row = 0; row < heights; row++) {
for (int col = 0; col < weights; col++) {
if (nc == 1) {
int gray = gray_src.at<uchar>(row, col);
gray_src.at<uchar>(row, col) = 255 - gray;
}
else if(nc == 3){
int b = dst.at<Vec3b>(row, col)[0];
int g = dst.at<Vec3b>(row, col)[1];
int r = dst.at<Vec3b>(row, col)[2];
dst.at<Vec3b>(row, col)[0] = 255 - b;
dst.at<Vec3b>(row, col)[1] = 255 - g;
dst.at<Vec3b>(row, col)[2] = 255 - r;
//gary_src.at<uchar>(row, col) = min(r, min(g, r));
}
}
}
//API
/*bitwise_not(src,dst);*/
namedWindow("舵主的灰度转换图像", WINDOW_AUTOSIZE);
imshow("舵主的灰度转换图像",gray_src);
imshow("舵主的三通道转换图像", dst);
waitKey(0);
return(0);
}
效果