opencv mat的拼接,及乘法
来源:互联网 发布:汽车epc软件下载 编辑:程序博客网 时间:2024/05/22 01:33
先说乘法。按照http://www.opencv.org.cn/forum.php?mod=viewthread&tid=35655的说法,仅当cv::Mat的元素类型是32FC1, 32FC2, 64FC1, 64FC2时,才可以做乘法。否则报错。看下面的例子:
#include <opencv2/opencv.hpp>#include <iostream>#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_core249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_imgproc249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_highgui249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_ml249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_video249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_features2d249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_calib3d249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_objdetect249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_contrib249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_legacy249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_flann249d.lib") int main(void){cv::Mat mtx1(2,1,CV_16S);mtx1.at<short>(0,0) = 1;mtx1.at<short>(1,0) = 2;cv::Mat mtx2(2,1,CV_16S);mtx2.at<short>(0,0) = 3;mtx2.at<short>(1,0) = 4;cv::Mat mtx3(2,1,CV_16S);mtx3.at<short>(0,0) = 5;mtx3.at<short>(1,0) = 6;cv::Mat mtx;cv::hconcat(mtx1, mtx2, mtx);std::cout<<mtx<<std::endl;;cv::Mat mtxPrdct = mtx * mtx3;std::cout<<mtxPrdct;std::cin.get();return 0;}
我定义了三个两行一列的矩阵。然后把前两个矩阵左右合并,构成一个2x2的矩阵,与第三个矩阵相乘,结果报错:
现在修改数据类型:
#include <opencv2/opencv.hpp>#include <iostream>#pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_core249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_imgproc249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_highgui249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_ml249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_video249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_features2d249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_calib3d249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_objdetect249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_contrib249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_legacy249d.lib") #pragma comment(lib, "E:\\cv\\opencv\\build\\x86\\vc11\\lib\\opencv_flann249d.lib") int main(void){cv::Mat mtx1(2,1,CV_32FC1);mtx1.at<float>(0,0) = 1.0;mtx1.at<float>(1,0) = 2.0;cv::Mat mtx2(2,1,CV_32FC1);mtx2.at<float>(0,0) = 3.0;mtx2.at<float>(1,0) = 4.0;cv::Mat mtx3(2,1,CV_32FC1);mtx3.at<float>(0,0) = 5.0;mtx3.at<float>(1,0) = 6.0;cv::Mat mtx;cv::hconcat(mtx1, mtx2, mtx);std::cout<<mtx<<std::endl;;cv::Mat mtxPrdct = mtx * mtx3;std::cout<<mtxPrdct;std::cin.get();return 0;}
运行结果:
矩阵左右拼接是利用cv::hconcat(A, B, C)函数完成的。A,B是输入变量。C是结果。C的左半边是A,右半边是B。此外还有cv::vconcat()函数,用来做上下拼接。
阅读全文
0 0
- opencv mat的拼接,及乘法
- OpenCV mat数据类型及位数
- OpenCV的下载安装及简单的Mat结构介绍
- OpenCV Mat的实现
- Opencv的Mat型
- OPenCV 的mat类
- opencv的mat操作
- opencv Mat的使用方法
- opencv的Mat类
- Opencv Mat类的操作符重载及矩阵操作
- OpenCV的setTo函数及Mat mat=labels==1详解
- openCV的矩阵乘法
- OpenCV Mat的使用小记
- OpenCV的Mat基本用法
- opencv Mat 的基本操作
- opencv中mat的push_back。
- opencv Mat - 图像的容器
- opencv的Mat中step
- Java中的代码点与代码单元概念
- Spring(三)AOP
- 解析XML文件——JDOM基本操作
- 同一个docker镜像,如何拉起多个docker container?
- 搭建基于Selenium+TestNG+Maven+Jenkins+SVN的Web端UI自动化测试环境
- opencv mat的拼接,及乘法
- 算法分析与设计课程10——523. Continuous Subarray Sum
- 数据结构之链表——c
- 哈夫曼树
- SSH和SSM对比总结
- 从微信浏览器,调起本地应用,最简单的解决方案
- 音乐播放
- http2
- 编程语言学习心得