虽然以前用过opencv, 但那是本科做机器人的时候的事情了, 那时候用的还是opencv1.0的库, 就是那个到处都带着cv前缀的那个。现在准备转投opencv2.0,虽然,相关的操作用matlab是没有问题的, 可是毕竟学了这么多年C/C++, 实验室还是和图像处理相关的, 以后出去找工作, 说起来要是连opencv也不会, 那实在是太丢人了, 于是准备开始花上一段时间补习一下opencv的基本操作。
我们用的参考书是<< opencv2 计算机视觉编程攻略 >>
这次主要实践的是 imread, imshow, puttext, 以及ROI操作
实验发现, ROI操作中, roi 区域的图像格式一定要和 logo图像格式相同,才能显示效果, 否则是没有效果的23333
#include <opencv.hpp>
#include <string>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
// 配置环境
string fileFolder = "E:/system dir/Desktop/QT/opencv2 computer vision/Opencv2/images/chap 1 ustc/";
string background = fileFolder + "ustc2.jpg";
string logo = fileFolder + "ustc.jpg";
// 载入src 和 logo
Mat m_src = imread(background);
Mat m_logo = imread(logo);
// 验证输入
if (m_src.empty() || m_logo.empty()){
cerr << "failed to load images" << endl;
return EXIT_FAILURE;
}
// 缩放
resize(m_logo, m_logo, Size(0, 0), 0.5, 0.5);
// 二值化反转
threshold(m_logo, m_logo, 150, 255, CV_THRESH_BINARY_INV);
// roi
Mat roi = m_src(Range(m_src.rows - m_logo.rows, m_src.rows),
Range(m_src.cols - m_logo.cols, m_src.cols));
// mask 0 无效, 1 覆盖
Mat mask(m_logo);
m_logo.copyTo(roi, mask);
// 显示文字
putText(m_src, "ustc 2015.10.18 by zhyh2010", Point(20, m_src.rows - 20),
FONT_HERSHEY_COMPLEX, 1,
Scalar(0), 2, CV_AA);
// 显示
imshow("src", m_src);
waitKey();
return EXIT_SUCCESS;
}
显示效果: