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中的赋值运算符
May 13 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
Python 爬虫的工具列表大全
Jan 31 Python
Python3安装Pymongo详细步骤
May 26 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
Python descriptor(描述符)的实现
Nov 15 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实现的带超时功能get_headers函数
2015/02/10 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
Python守护进程用法实例分析
2015/06/04 Python
Python分治法定义与应用实例详解
2017/07/28 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
医科大学毕业生自荐信
2014/02/03 职场文书
社区反邪教工作方案
2014/06/16 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
借款协议书
2014/09/16 职场文书
给老婆道歉的话
2015/01/20 职场文书
会计试用期自我评价
2015/03/10 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
告知书格式
2015/07/01 职场文书
小学毕业感言100字
2015/07/30 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
Python中的变量与常量
2021/11/11 Python