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 相关文章推荐
Python httplib模块使用实例
Apr 11 Python
Python单链表简单实现代码
Apr 27 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
Python列表list排列组合操作示例
Dec 18 Python
python中return的返回和执行实例
Dec 24 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
Aug 03 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
python IP地址转整数
Nov 20 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
Python与C++中梯度方向直方图的实现
Mar 17 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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
php查看session内容的函数
2008/08/27 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP实现简易blog的制作
2016/10/24 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
python文件操作整理汇总
2014/10/21 Python
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
python3 读取Excel表格中的数据
2018/10/16 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Python创建字典的八种方式
2019/02/27 Python
python图像和办公文档处理总结
2019/05/28 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
如何解决安装python3.6.1失败
2020/07/01 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
交通事故被告代理词
2015/05/23 职场文书
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python
Python学习之异常中的finally使用详解
2022/03/16 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android