【第三课:C++和opencv】图像反转

来源:互联网 发布:淘宝`热带鱼活体 编辑:程序博客网 时间:2024/05/22 06:18

        图像反转就是黑白颠倒,若像素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类中定义的模板