OpenCV图像处理算法——开篇(一)
来源:互联网 发布:python decoding 编辑:程序博客网 时间:2024/05/04 07:23
OpenCV图像处理算法——初窥(一)
简介
本人也是新兵,一边学一边写,所以称为一篇入门笔记更恰当。但我觉得起个更能突出数学在编程中的重要性的名字也不是不可以,(绝非标题党)。这是一篇OpenCV描述基本图像处理算法的系列文章,主要涉及矩阵知识(推荐可汗学院线性代数公开课 https://www.khanacademy.org/math/linear-algebra)。不是文档的翻译,官方文档教程教程中能查到的术语示例,本文将不再赘述。
在下学习方向前端开发(数据可视化,web动画等),希望觅得同道知音一起拼搏江湖。打算一周写一篇,保证质量,初次写系列文章,难免会出错,期待能一起探讨学习 (邮箱 dferic@foxmail.com)。
准备
环境:OpenCV-3.2.0 + Visual Studio-2015 环境配置参考文档 http://docs.opencv.org/
配置完成后一个简单的示例来了解OpenCV中图像-矩阵关系,主要涉及Mat类,文档上有详尽介绍。
#include "stdafx.h"#include "opencv2/imgcodecs.hpp"#include <opencv2/highgui.hpp>#include <iostream>using namespace cv;int main(void){ Mat src1,src2,dst; src1 = imread("source.png",-1);//读入带alpha的png图片 if (src1.empty()) { std::cout << "error load src1" << std::endl; return -1; }; src2 = Mat(5, 5, CV_8UC4, Scalar(0, 0, 255,100));//用Mat构造函数创建一个5*5的Mat类 dst = src1 + src2;//矩阵相加 std::cout << "src1:" << src1 << std::endl; std::cout << "src2" <<src2 << std::endl; std::cout << "dst" <<dst << std::endl; imwrite("target.png", dst);//写入文件 imshow("",dst); waitKey(0); return 0;}
运行结果:
- 有不理解的函数希望能看看文档,或者直接转到声明-
- 分别以图像读入和Mat构造方法创建了两个mat类,存储的就是描述图像的矩阵,简单相加之后,得到新的mat类,可直接写入为图像,所以对图像的处理也就转换成对矩阵的操作
addWeighted函数
一般是混合两张图片用的,我觉得翻译为加权处理更适合,函数结构如下:
具体操作:
Mat src1,src2,dst; double alpha = 0.5; double beta = 1.0 - alpha; src1 = imread("source.png",-1); if (src1.empty()) { std::cout << "error load src1" << std::endl; return -1; }; src2 = Mat(5, 5, CV_8UC4, Scalar(0, 0, 255,100)); addWeighted(src1,alpha,src2,beta,0.0,dst); std::cout << "src1:" << std::endl << src1 << std::endl; std::cout << "src2" << std::endl << src2 << std::endl; std::cout << "dst" << std::endl << dst << std::endl; imwrite("target.png", dst);
结果:
这个OpenCV函数更直观描述了矩阵操作与图像图例之间关系,更复杂的图像操作就是矩阵的更复杂运算。
addWeighted(src1,alpha,src2,beta,0.0,dst);
等价于
dst=alpha∗src1+beta∗src2+0.0;
结语
很后悔大学没有把线性代数这门课好好学,那时候真的不知道,也没人能让我知道数学和编程真的很紧密。如果有位老师能让我明白这门课在编程中重要性,我想开这门课的目的就达到一大半了。。。扯远了,如果忘了线代,找些资料重新学习学习,IT本来就是要不断学习,不断积累才会在行业中能走的更远
阅读全文
0 0
- OpenCV图像处理算法——开篇(一)
- 【OpenCV】图像处理(一)平滑处理
- 图像处理(一) opencv库
- OpenCv+VS2017图像处理入门(一)
- OPENCV图像处理提高(一)图像增强
- 计算机视觉与图像处理(一)——卷积与opencv
- Opencv 图像处理——平滑处理
- 排序算法总结分析(一)——开篇
- 常用用图像处理算法(一)
- 【开发日记】C#调用C++图像处理算法(opencv)
- Python-OpenCV 处理图像(一):基本操作
- OPENCV图像处理基础(一)读取一张图片
- Python-OpenCV 处理图像(一):基本操作
- 图像处理(一)Ubuntu14.04安装opencv-2.4.10
- Python-OpenCV 处理图像(一):基本操作 cv2
- 学习OpenCV范例(十)——图像平滑处理
- OpenCV 图像处理——平滑操作
- Opencv 图像处理——形态学方法
- EffectiveJava(笔记六) 方法
- (33)多态中成员的特点
- java 中如何避免多线程不安全
- JAVA spring+jcrop.js实现简单的头像剪裁
- 什么是CRM?
- OpenCV图像处理算法——开篇(一)
- jzoj1301 treecut
- mybatis学习知识点摘录
- Java读写文件的几种方法
- Windows下如何安装ubuntu系统?
- Codeforces 817 C. Really Big Numbers 二分
- 人生第一个博客 希望能坚持下去
- 使用机器学习算法优化视频编码过程
- Makefile学习