OpenCV学习第五篇:图像操作
来源:互联网 发布:2012nba总决赛数据 编辑:程序博客网 时间:2024/06/05 17:29
1.读写图像
imread可以加载指定的RGB图像
imwrite保存图像文件,类型由扩展名决定
2.读写像素
int gray = dst.at(row,col)读取指定行列的像素值
这里是代码:
#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace cv;using namespace std;int main(int argc, char** ragv) { Mat src, dst; src = imread("F:/识图/645-140GG51042.JPG"); if (src.empty()) { cout << "could not image!" << endl; return -1; } namedWindow("SRC", CV_WINDOW_AUTOSIZE); imshow("SRC", src); cvtColor(src, dst, CV_BGR2GRAY); namedWindow("OUTPUT", CV_WINDOW_AUTOSIZE); imshow("OUTPUT", dst); int height = dst.rows; int weidth = dst.cols; for (int row = 0; row < height; row++) { for (int col = 0; col < weidth; col++) { //获取这个位置的像素 int gray = dst.at<uchar>(row, col); //反向 dst.at<uchar>(row, col) = 255 - gray; } } namedWindow("FAN", CV_WINDOW_AUTOSIZE); imshow("FAN", dst); waitKey(0); return 0;}
效果如下:
3.Vec3b里面存储的B,G,R的值
Vec3f对应的float类型的数据
把CV_8UC1转换到CV32F1实现如下:
src.convertTo(dst,CV_32F);
完整代码:
#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace cv;using namespace std;int main(int argc, char** ragv) { Mat src, dst; src = imread("F:/识图/645-140GG51042.JPG"); if (src.empty()) { cout << "could not image!" << endl; return -1; } namedWindow("SRC", CV_WINDOW_AUTOSIZE); imshow("SRC", src); cvtColor(src, dst, CV_BGR2GRAY); namedWindow("OUTPUT", CV_WINDOW_AUTOSIZE); imshow("OUTPUT", dst); int height = dst.rows; int weidth = dst.cols; for (int row = 0; row < height; row++) { for (int col = 0; col < weidth; col++) { //获取这个位置的像素 int gray = dst.at<uchar>(row, col); //反向 dst.at<uchar>(row, col) = 255 - gray; } } Mat drt_src; drt_src.create(src.size(), src.type()); height = src.rows; weidth = src.cols; //获取通道数 int nc = src.channels(); //主要算法 for (int row = 0; row < height; row++) { for (int col = 0; col < weidth; col++) { if (nc == 1) { //获取这个位置的像素 int gray = dst.at<uchar>(row, col); //反向 dst.at<uchar>(row, col) = 255 - gray; } else if (nc==3) { //反差彩色图像 int B = src.at<Vec3b>(row, col)[0]; int G = src.at<Vec3b>(row, col)[1]; int R = src.at<Vec3b>(row, col)[2]; drt_src.at<Vec3b>(row, col)[0] = 255 - B; drt_src.at<Vec3b>(row, col)[1] = 255 - G; drt_src.at<Vec3b>(row, col)[2] = 255 - R; } } } //反差彩色图像快捷方式 bitwise_not(src, drt_src); namedWindow("FAN", CV_WINDOW_AUTOSIZE); imshow("FAN", drt_src); waitKey(0); return 0;}
实现效果:
阅读全文
0 0
- OpenCV学习第五篇:图像操作
- OpenCV学习之图像操作
- OpenCV学习之子图像操作
- OpenCV学习篇之六 遍历图像和邻域操作
- 第五章 学习OpenCV——图像处理
- opencv学习(8)图像加操作
- [学习opencv]图像腐蚀、膨胀、开闭操作
- OpenCV学习笔记一:图像基础操作
- OPENCV篇——第五章 图像的简单处理
- 第五篇 学习OpenCV之视频处理
- opencv基本图像操作
- OpenCV图像缩放操作
- OpenCv图像操作
- opencv图像数据操作
- opencv图像基本操作
- opencv 图像操作
- opencv 内存图像操作
- Opencv图像Mat操作
- for中的i++与++i的差别
- 解决本地tomcat部署项目乱码问题
- Euclid(欧几里得)算法
- Effective Java读书笔记-覆盖equals时总要覆盖hashCode
- babyos2(5)——分页
- OpenCV学习第五篇:图像操作
- HRBUST 1547
- Idea自带的文件过滤功能,功能类似gitignore不过只能过滤文件夹
- LSH系列二:p-稳定E2LSH
- T
- 如何编写测试用例(APP)
- 关于链表的C语言实现(中级)
- SSH框架和SVN技术分析以及客户端的使用
- 顶级程序员和普通程序员在思维模式上的5个区别