opencv3/C++图像像素操作详解


Posted in Python onDecember 10, 2019

RGB图像转灰度图

RGB图像转换为灰度图时通常使用:

opencv3/C++图像像素操作详解

进行转换,以下尝试通过其他对图像像素操作的方式将RGB图像转换为灰度图像。

#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;

int main()
{
 //像素操作
 Mat src,dst;
 src = imread("E:/image/image/daibola.jpg");
 if(src.empty())
 {
  printf("can not load image \n");
  return -1;
 }

 namedWindow("input");
 imshow("input",src);

 dst.create(src.size(), src.type());

 for(int row = 0; row < src.rows; row++)
 {
  for(int col = 0; col < src.cols; col++)
  {
   int b = src.at<Vec3b>(row, col)[0];
   int g = src.at<Vec3b>(row, col)[1];
   int r = src.at<Vec3b>(row, col)[2];
   dst.at<Vec3b>(row, col)[0] = max(r,max(g,b));
   dst.at<Vec3b>(row, col)[1] = max(r,max(g,b));
   dst.at<Vec3b>(row, col)[2] = max(r,max(g,b));

  }
 }

 namedWindow("output");
 imshow("output",dst);
 waitKey();

}

opencv3/C++图像像素操作详解

同理使用min(r,min(g,b))可以看到由于选择了较小的灰度值图像会明显变暗:

opencv3/C++图像像素操作详解

图像线性增强

通过对图像像素操作(线性变换),实现图像的线性增强。

#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;

int main()
{
 Mat src1, dst;
 src1 = imread("E:/image/image/im1.jpg");
 if(src1.empty())
 {
  printf("can not load im1 \n");
  return -1;
 }
 double alpha = 1.2, beta = 50;
 dst = Mat::zeros(src1.size(), src1.type());
 for(int row = 0; row < src1.rows; row++)
 {
  for(int col = 0; col < src1.cols; col++)
  {
   if(src1.channels() == 3)
   {
    int b = src1.at<Vec3b>(row, col)[0]; 
    int g = src1.at<Vec3b>(row, col)[1]; 
    int r = src1.at<Vec3b>(row, col)[2]; 

    dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b*alpha + beta); 
    dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g*alpha + beta); 
    dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r*alpha + beta); 
   }
   else if (src1.channels() == 1)
   {
    float v = src1.at<uchar>(row, col); 
    dst.at<uchar>(row, col) = saturate_cast<uchar>(v*alpha + beta);
   }
  }
 }

 namedWindow("output",CV_WINDOW_AUTOSIZE);
 imshow("output", dst);
 waitKey();
 return 0;
}

opencv3/C++图像像素操作详解

opencv3/C++图像像素操作详解

掩膜操作调整图像对比度

使用一个3×3掩模增强图像对比度:

opencv3/C++图像像素操作详解

#include<opencv2/opencv.hpp>
#include<math.h>
using namespace cv;

int main()
{
 Mat src, dst;
 src = imread("E:/image/image/daibola.jpg");
 CV_Assert(src.depth() == CV_8U);
 if(!src.data)
 {
  printf("can not load image \n");
  return -1;
 }

 src.copyTo(dst);
 for(int row = 1; row<(src.rows - 1); row++)
 {
  const uchar* previous = src.ptr<uchar>(row - 1);
  const uchar* current = src.ptr<uchar>(row);
  const uchar* next = src.ptr<uchar>(row + 1);
  uchar* output = dst.ptr<uchar>(row);
  for(int col = src.channels(); col < (src.cols - 1)*src.channels(); col++)
  {
   *output = saturate_cast<uchar>(9 * current[col] - 2*previous[col] - 2*next[col] - 2*current[col - src.channels()] - 2*current[col + src.channels()]);
   output++;
  }
 }

 namedWindow("image", CV_WINDOW_AUTOSIZE);
 imshow("image",dst);
 waitKey();
 return 0;
}

opencv3/C++图像像素操作详解

像素重映射

利用cv::remap实现像素重映射;

cv::remap参数说明:

Remap(
InputArray src,// 输入图像
OutputArray dst,// 输出图像
InputArray map1,// 映射表1(CV_32FC1/CV_32FC2)
InputArray map2,// 映射表2(CV_32FC1/CV_32FC2)
int interpolation,// 选择的插值
int borderMode,// 边界类型(BORDER_CONSTANT)
const Scalar borderValue// 颜色 
)

插值方法:

CV_INTER_NN =0, 
CV_INTER_LINEAR =1, 
CV_INTER_CUBIC =2, 
CV_INTER_AREA =3, 
CV_INTER_LANCZOS4 =4

通过像素重映射实现图像垂直翻转:

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
 Mat src,dst;
 src = imread("E:/image/image/daibola.jpg");
 if(src.empty())
 {
  printf("can not load image \n");
  return -1;
 }
 namedWindow("input", CV_WINDOW_AUTOSIZE);
 imshow("input", src);
 Mat mapx,mapy;
 mapx.create(src.size(), CV_32FC1);
 mapy.create(src.size(), CV_32FC1);
 for(int row = 0; row < src.rows; row++)
 {
  for(int col = 0; col < src.cols; col++)
  {
   mapx.at<float>(row, col) = col;
   mapy.at<float>(row, col) = src.rows - row - 1;
  }
 }
 remap(src, dst, mapx, mapy, CV_INTER_NN, BORDER_CONSTANT, Scalar(0,255,255));

 namedWindow("output", CV_WINDOW_AUTOSIZE);
 imshow("output",dst);
 waitKey();
 return 0;
}

opencv3/C++图像像素操作详解

以上这篇opencv3/C++图像像素操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
图文详解WinPE下安装Python
May 17 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
python实现logistic分类算法代码
Feb 28 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python3 删除所有自定义变量的操作
Apr 08 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 #Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 #Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 #Python
python3 webp转gif格式的实现示例
Dec 10 #Python
Spring Cloud Feign高级应用实例详解
Dec 10 #Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 #Python
使用opencv将视频帧转成图片输出
Dec 10 #Python
You might like
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
python操作mysql数据库
2017/03/05 Python
Python工厂函数用法实例分析
2018/05/14 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
如何利用Python识别图片中的文字
2020/05/31 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
厂长岗位职责
2014/02/19 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers