Opencv学习笔记
来源:互联网 发布:禅道linux一键安装包 编辑:程序博客网 时间:2024/06/04 18:36
一、图像反色
用255减去每个像素值,得到一个心图像,这里使用迭代器和LUT(look up table )两种方法。
1.用迭代器
#include <highgui.h> using namespace std ; using namespace cv ; int main(int argc,char ** argv) { Mat image = imread(argv[1],1) ; imshow("image" , image) ; cv::Mat tempImage = image.clone(); // 初始化源图像迭代器 cv::MatConstIterator_<cv::Vec3b> srcIterStart = image.begin<cv::Vec3b>(); cv::MatConstIterator_<cv::Vec3b> srcIterEnd = image.end<cv::Vec3b>(); // 初始化输出图像迭代器 cv::MatIterator_<cv::Vec3b> resIterStart = tempImage.begin<cv::Vec3b>(); cv::MatIterator_<cv::Vec3b> resIterEnd = tempImage.end<cv::Vec3b>(); // 遍历图像反色处理 while( srcIterStart != srcIterEnd ) { (*resIterStart)[0] = 255 - (*srcIterStart)[0]; (*resIterStart)[1] = 255 - (*srcIterStart)[1]; (*resIterStart)[2] = 255 - (*srcIterStart)[2]; // 迭代器递增 srcIterStart++; resIterStart++; } imshow("outputimage",tempImage); waitKey(0) ; return 0 ; }
2.用LUT
该函数可进行图像像素查找,扫描,操作
#include <highgui.h> using namespace std ; using namespace cv ; int main(int argc,char ** argv) { Mat image = imread(argv[1],1) ; imshow("image" , image) ; int row = image.rows; int col = image.cols; cv::Mat tempImage = image.clone(); // 建立LUT 反色table uchar LutTable[256]; for (int i = 0; i < 256; ++i) LutTable[i] = 255 - i; cv::Mat lookUpTable(1, 256, CV_8U); uchar* pData = lookUpTable.data; // 建立映射表 for( int i = 0; i < 256; ++i) pData[i] = LutTable[i]; // 应用索引表进行查找 cv::LUT(image, lookUpTable, tempImage); imshow("outputimage",tempImage); waitKey(0) ; return 0 ; }
结果如下:
二、图像平移
代码:
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> using namespace cv; //平移后大小不变 void translateTransform(cv::Mat const& src, cv::Mat& dst, int dx, int dy) { CV_Assert(src.depth() == CV_8U); const int rows = src.rows; const int cols = src.cols; dst.create(rows, cols, src.type()); Vec3b *p; for (int i = 0; i < rows; i++) { p = dst.ptr<Vec3b>(i); for (int j = 0; j < cols; j++) { //平移后坐标映射到原图像 int x = j - dx; int y = i - dy; //保证映射后的坐标在原图像范围内 if (x >= 0 && y >= 0 && x < cols && y < rows) p[j] = src.ptr<Vec3b>(y)[x]; } } } //平移后大小变化 void translateTransformSize(cv::Mat const& src, cv::Mat& dst, int dx, int dy) { CV_Assert(src.depth() == CV_8U); const int rows = src.rows + abs(dy); //输出图像的大小 const int cols = src.cols + abs(dx); dst.create(rows, cols, src.type()); Vec3b *p; for (int i = 0; i < rows; i++) { p = dst.ptr<Vec3b>(i); for (int j = 0; j < cols; j++) { int x = j - dx; int y = i - dy; if (x >= 0 && y >= 0 && x < src.cols && y < src.rows) p[j] = src.ptr<Vec3b>(y)[x]; } } } int main(int argc,char** argv) { Mat srcimage,dst,dst1; srcimage=imread(argv[1],1); namedWindow("src_window"); imshow("src_window",srcimage); translateTransform(srcimage, dst,50, 50); namedWindow("dst_window"); imshow("dst_window",dst); translateTransformSize(srcimage,dst1, 50, 50); namedWindow("dst_window1"); imshow("dst_window1",dst1); waitKey(0); }
1.大小不变的平移 结果显示如下
2.图像大小变化平移 结果如下
0 0
- 《学习OpenCV》 学习笔记
- OpenCV学习笔记
- OpenCV 学习笔记
- 学习笔记-----opencv
- OpenCV学习笔记(1)
- OpenCV 学习笔记
- OpenCV学习笔记
- OpenCV学习笔记
- OpenCV学习笔记系列
- OpenCV学习笔记 收藏
- opencv学习笔记
- OPENCV学习笔记(1)
- OPENCV学习笔记(2)
- OpenCV学习笔记-形态学
- OpenCV学习笔记-卷积
- OpenCV学习笔记
- OpenCV学习笔记
- OPENCV 学习笔记1
- Android webview使用详解
- Git Stash保存临时修改
- NE555延时电路设计
- C/C++训练1---最大公约数与最小公倍数
- RecyclerView刷新notifyDataSetChanged
- Opencv学习笔记
- 微信小程序系列3(新建page小技巧)
- android 高德地图定位获取经纬度
- 乘法口诀
- poj 3181 求各种纸币组成某个特定值的方案数
- JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
- request.getHeader("X-Forwarded-For")总是返回127.0.0.1
- iOS 屏幕左侧向右滑动返回-问题
- 前端压缩图片+ajax+php 异步上传