图像反转就是黑白颠倒,若像素px= 0,则反转后px=255。公式:反转后的像素a= 255- a。
主要作用:增强图像的暗区中白色或灰色的细节,特别是黑色面积在尺寸上占主导地位时。
好了不说了,先上代码:
PS:代码使用直接访问像素的,直接访问图片的像素有很多种。
// 图像的反转.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
Mat src;
int height;
int width;
int i;
int j;
//载入图片
src= imread("F://Opencv_picture//1212.jpg");
if(!src.data)
{
cout<<"Could not open or find image."<< endl;
return -1;
}
//获取图像信息
height= src.rows;
width= src.cols* src.channels(); // 列项要乘通道数
//创建窗口
namedWindow("src", CV_WINDOW_AUTOSIZE);
namedWindow("dst", CV_WINDOW_AUTOSIZE);
//显示图片
imshow("src", src);
//图像反转
for(i= 0; i< height; i++)
{
for(j=0; j< width; j++)
{
src.at<uchar>(i, j)= 255- src.at<uchar>(i, j); // 每一个像素反转
}
}
//显示图片
imshow("dst", src);
waitKey(0);
return 0;
}
结果图:
分析:反转后凸显出病变了的区(黑色部分)
PS:
一:at<uchar>也是在Mat类中定义了的模板
二: 在检验是否加载了图片时,有两种方法
(1)if(!image.data) { };
(2) if(image.empty()) { }; // empty()是Mat类中定义的模板