#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc,char** argv)
{
  Mat img1, img2,img3,img1_1;
  img1 = imread("D://images//4.jpg");
  if (img1.empty())
  {
    cout <<"could not load images......" << endl;
    return 0;
  }

  namedWindow("win1",CV_WINDOW_AUTOSIZE);
  imshow("win1",img1);
  img1.copyTo(img1_1);
  //namedWindow("win1_1", CV_WINDOW_AUTOSIZE);
  //imshow("win1_1", img1_1);

  cvtColor(img1,img2,CV_BGR2GRAY);
  namedWindow("win2", CV_WINDOW_AUTOSIZE);
  imshow("win2", img2);

  int height = img2.rows;
  int width = img2.cols;

  for (int row=0;row<height;row++)
  {
    for (int col=0;col<width;col++)
    {
      int px_value = img2.at<uchar>(row,col);
      //cout << px_value<< endl;
      img2.at<uchar>(row, col) = 255 - px_value;
    }
  }

  namedWindow("win3", CV_WINDOW_AUTOSIZE);
  imshow("win3", img2);

  img3.create(img1_1.size(), img1_1.type());
  int height_3 = img1_1.rows;
  int widht_3 = img1_1.cols;
  int channels_3 = img1_1.channels();

  /*
  for (int row = 0; row < height_3; row++)
  {
    for (int col=0;col<widht_3;col++)
    {
      if (channels_3==1)
      {
        int px_value = img1_1.at<uchar>(row,col);
        img1_1.at<uchar>(row, col) = 255 - px_value;
      }
      else if (channels_3==3)
      {
        int b = img3.at<Vec3b>(row, col)[0];
        int g = img3.at<Vec3b>(row, col)[1];
        int r = img3.at<Vec3b>(row,col)[2];

        img3.at<Vec3b>(row, col)[0] = 255 - b;
        img3.at<Vec3b>(row, col)[1] = 255 - g;
        img3.at<Vec3b>(row, col)[2] = 255 - r;
      }
    }
  }
  */

  bitwise_not(img1_1,img3);

  namedWindow("win4", CV_WINDOW_AUTOSIZE);
  imshow("win4", img3);

  waitKey(0);
  return 0;
}

Opencv图像变成灰度图像、取反图像的更多相关文章

  1. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  2. OpenCV学习笔记:如何扫描图像、利用查找表和计时

    目的 我们将探索以下问题的答案: 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 这里我们测试的,是一种简单的 ...

  3. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...

  4. OpenCV学习笔记(七) 图像金字塔 阈值 边界

    转自: OpenCV 教程 使用 图像金字塔 进行缩放 图像金字塔是视觉运用中广泛采用的一项技术.一个图像金字塔是一系列图像的集合 - 所有图像来源于同一张原始图像 - 通过梯次向下采样获得,直到达到 ...

  5. 深入学习OpenCV中图像灰度化原理,图像相似度的算法

    最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...

  6. OpenCV计算机视觉学习(2)——图像算术运算 & 掩膜mask操作(数值计算,图像融合,边界填充)

    在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比 ...

  7. OpenCV计算机视觉学习(8)——图像轮廓处理(轮廓绘制,轮廓检索,轮廓填充,轮廓近似)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...

  8. OpenCV计算机视觉学习(12)——图像量化处理&图像采样处理(K-Means聚类量化,局部马赛克处理)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 准备 ...

  9. OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...

随机推荐

  1. 在Blender上安装RenderMan插件

    2018/3/27 Download and Install Blender itself Download RenderMan Installer (Need to register an acco ...

  2. 如何快速上手.net下单元测试工具NUnit?

    NUnit基本使用 准备知识: 读此博文需要了解单元测试基本概念及NUnit的的安装. 传送门:单元测试之道(使用NUnit) 1.常见的错误 当学习一个新东西时,先学习错误,是最快的方式. 1.1 ...

  3. 安卓开发第一记 android stdio 安装后 新建测试项目报错

    Failed to resolve:com.android.support:appcompat-v7:报错处理   你在使用android studio时是否也出现过上图的报错,你还在为它的出现烦恼? ...

  4. 什么是镜头shading

    shading分为两种: Lens Shading:由于Lens的光学特性,Sensor影像区的边缘区域接收的光强比中心小,所造成的中心和四角亮度不一致的现象. color shading:由于LEN ...

  5. openfaas cli 安装

     1. 安装脚本 curl -sL https://cli.get-faas.com/ | sudo sh   备注安装完成之后如果没有 faas-cli 可以下载脚本,手工执行   2. 使用二进制 ...

  6. zabbix 执行自定义key脚本超时

    报错如下: [root@master scripts]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k web.site.code[www.baid ...

  7. sqldeveloper和plsqldebeloper

    sqldeveloper : 支持不用tns连,支持jdbc直接连的. plsqldebeloper : 必须使用tns连, 如果oracle安装在本机,本机已经有tns文件,和oci.dll,只需在 ...

  8. AngularJS:Service

    ylbtech-AngularJS:Service 1.返回顶部 1. AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务. 什么是服务? 在 An ...

  9. Linux学习笔记 -- 文本编辑器之 vi与vim

    vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode). 这三种模式的 ...

  10. python's eighth day for me

    f : 变量,f_obj, file, f_handler,...文件句柄. open : windows 的系统功能. windows 默认编码方式:gbk.   Linux 默认编码方式:utf ...