opencv 图片染色 及 移动

  • 前言
  • 一、图片的染色
  • 二、图片的移动
    • 1、图片移动的opencv库函数(warpAffine)参数解释
    • 2、实现
  • 3、效果及调用
    • 1、原图
    • 2、调用函数
    • 3、效果图

前言

图像染色的原理很简单,首先指定一种渲染颜色,然后计算图片当前像素点的B ,G,R的平均值,用当前像素的平均值分别乘以渲染颜色的B、G、R分量值并除与255,将结果做为当前象素的最终颜色
提示:以下是本篇文章正文内容,下面案例可供参考

一、图片的染色

QImage ImageHandle::Dyeing(QImage &image, int blue, int green, int red)
{image = image.convertToFormat(QImage::Format_RGB888);cv::Mat mat = this->QImage2Mat(image);//初始化目标Matcv::Mat dst = cv::Mat::zeros(mat.size(),mat.type());int chl = mat.channels();//处理每个像素点的像素for(int row=0;row<mat.rows;row++){for(int col=0;col<mat.cols;col++){//计算每个像素点三个通道的的平均值 这样可以达到染色的效果而不是增加亮度int avg = (mat.at<cv::Vec3b>(row,col)[0] + mat.at<cv::Vec3b>(row,col)[1] + mat.at<cv::Vec3b>(row,col)[2])/3;//处理每个通道的值 传入的颜色*平均值/255if(chl == 3){if(blue == 0){dst.at<cv::Vec3b>(row,col)[0] = 0;}else{//使用saturate 可以防止像素溢出 失真dst.at<cv::Vec3b>(row,col)[0] = cv::saturate_cast<uchar>(blue * avg/255);}if(green == 0){dst.at<cv::Vec3b>(row,col)[1] = 0;}else{dst.at<cv::Vec3b>(row,col)[1] = cv::saturate_cast<uchar>(avg * green /255);}if(red == 0){dst.at<cv::Vec3b>(row,col)[2] = 0;}else{dst.at<cv::Vec3b>(row,col)[2] = cv::saturate_cast<uchar>(avg * red / 255);}}}}return this->Mat2QImage(dst);
}

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、图片的移动

1、图片移动的opencv库函数(warpAffine)参数解释

void warpAffine( InputArray src, OutputArray dst,InputArray M, Size dsize,int flags = INTER_LINEAR,int borderMode = BORDER_CONSTANT,const Scalar& borderValue = Scalar());

1、第一个参数 src 为原图片
2、第二个参数 dst 为输出图片
3、第三个参数 M 为位移矩阵
4、第四个参数 dsize 为原图像的尺寸
5、第五个参数 borderMode 为边缘处理模式 选择默认的即可
6、第六个参数 borderValue 为颜色

enum BorderTypes {BORDER_CONSTANT    = 0, //!< `iiiiii|abcdefgh|iiiiiii`  with some specified `i`BORDER_REPLICATE   = 1, //!< `aaaaaa|abcdefgh|hhhhhhh`BORDER_REFLECT     = 2, //!< `fedcba|abcdefgh|hgfedcb`BORDER_WRAP        = 3, //!< `cdefgh|abcdefgh|abcdefg`BORDER_REFLECT_101 = 4, //!< `gfedcb|abcdefgh|gfedcba`BORDER_TRANSPARENT = 5, //!< `uvwxyz|abcdefgh|ijklmno`BORDER_REFLECT101  = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101BORDER_DEFAULT     = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101BORDER_ISOLATED    = 16 //!< do not look outside of ROI
};

2、实现

QImage ImageHandle::PicturesMoving(QImage &image, int x, int y)
{image = image.convertToFormat(QImage::Format_RGB888);cv::Mat src = this->QImage2Mat(image);cv::Mat dst;//创建位移矩阵cv::Mat t_mat =cv::Mat::zeros(2, 3, CV_32FC1);t_mat.at<float>(0, 0) = 1;t_mat.at<float>(0, 2) = x; //水平平移量t_mat.at<float>(1, 1) = 1;t_mat.at<float>(1, 2) = y; //竖直平移量cv::warpAffine(src,dst,t_mat,src.size());return this->Mat2QImage(dst);
}

3、效果及调用

1、原图

2、调用函数

int main(int argc, char *argv[])
{QApplication a(argc, argv);QImage temp;temp = QImage("temp.png");ImageHandle f;temp = f.Dyeing(temp,125,125,125);temp = f.PicturesMovng(temp,20,20);QLabel *m_label = new QLabel();m_label->resize(1280,1024);QPixmap I_map = QPixmap::fromImage(temp);I_map = I_map.scaled(m_label->width(),m_label->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);m_label->setPixmap(I_map);m_label->show();return a.exec();
}

3、效果图

opencv 图片染色 及 移动相关推荐

  1. opencv图片线性混合可调

    opencv图片线性混合叠加.addWeighted()函数 直接上效果图 通过滚动条选择不同的透明值,使得两张图片进行不同程度的线性混合. 主要的代码是这句:addWeighted()函数 //根据 ...

  2. 2020-12-03 Python OpenCV: 图片的裁剪

    Python OpenCV: 图片的裁剪 图片裁剪使用img[y0:y1, x0:x1],其中参数分别代表y轴和x轴的起始坐标,具体使用方法如下: import cv2img = cv2.imread ...

  3. python+freetype+opencv 图片中文(汉字)显示 详细图文教程和项目完整源代码

    opencv图片写入中文(汉字)有两方法: 方法一: python+opencv+freetype https://blog.csdn.net/wyx100/article/details/75579 ...

  4. opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍

    本文来自于段力辉 译<OpenCV-Python 中文教程> 文章目录 一.图片 + 读入.显示.写出 1.cv2.imread() 2.cv2.imshow() 3.cv2.imwrit ...

  5. Pyhton opencv 图片裁剪

    Pyhton opencv 图片裁剪 opencv中可以通过 imread,imwrite进行图片读取和保存,imread读取图片后可以通过长度高度进行图片的裁剪 从上面图片可以得到,对角坐标是(x1 ...

  6. Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+

    前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...

  7. 三:OpenCV图片颜色通道数据转换

    对图片进行操作时经常会涉及到不同通道数据提取,在OpenCV中提供了很多比较便捷的操作函数,本文涉及函数如下: 1.cvtColor 颜色空间转换 2.convertTo 图片数据类型转换 3.spl ...

  8. python opencv 图片/视频 拼接

    python opencv 图片/视频 拼接 # coding: utf-8 # 像写诗一样写代码 import numpy as np import cv2img_A_path = "C: ...

  9. python pyqt5图片(QPixmap)和opencv图片数据结构相互转换

    python pyqt5图片(QPixmap)和opencv图片数据结构相互转换 在python中使用pyqt5和opencv混合编程时,有时需要两种图片数据结构的相互转换.网上比较多的是把openc ...

  10. 学习|OpenCV图片修复函数inpaint

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2020字,预计阅读6分钟 OpenCV图片修复 最近重新学习OpenCV的基础,偶然间发现了npaint的函数,于是就自己做了 ...

最新文章

  1. jquery validate 详解二
  2. golang 遍历文件夹和文件
  3. 【Linux】ps命令
  4. Word无法打开该文件,因为文件格式与文件扩展名不匹配的解决办法
  5. Spring boot日志关系
  6. 近5年133个Java面试题 你会几个?
  7. mysql 实时恢复_MySQL实时在线备份恢复方案:Replication+LVM Snapsho
  8. HDU - 4422 The Little Girl who Picks Mushrooms
  9. SpringBoot中自定义错误页面
  10. nyoj1086是否被整除(数学小技巧)
  11. ecshop二次开发笔记
  12. 计算机pe启动蓝屏怎么办,电脑使用PE系统蓝屏如何修复
  13. 统计——假设检验与p值
  14. 基于opendota的dota2战绩查询微信小程序
  15. linux运行中的一个错误解决
  16. uniapp 简单表单布局1
  17. WUSTOJ 1318: 区间的连通性(Java)
  18. 华为HCIA-datacom 学习笔记2——华为VRP系统
  19. 什么叫模拟量和数字量
  20. Zip4j 压缩包加密压缩与解压

热门文章

  1. 纯干货!盘点各行业程序员必备技能
  2. 最新腾讯防水墙滑块验证码破解,代码可以直接运行
  3. java实现登录注册界面
  4. 圣经中真的藏有密码吗? 摘自台湾权威杂志《科学月刊》
  5. plc梯形图如何转c语言,梯形图和指令怎么转换?plc梯形图转换指令表
  6. 用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手
  7. gpg: agent_genkey failed: Operation cancelled Key generation failed: Operation cancelled
  8. 程序设计 :题解+总结
  9. 刷机!刷机!!刷机!!!
  10. 山寨版Google识图