步骤
打开图像并显示基本信息
转换过程
灰度化函数
cvtColor(img, imgGray, CV_BGR2GRAY);
img为原图,imgGray为灰度图
二值化函数
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);
在阈值中的像素点将变为0(白色部分),阈值之外的像素将变为1(黑色部分)。
输出像素值
指针遍历
截取2/1灰度图像
- 其中:Rect的函数定义为: Rect(_Tp _x, _Tp _y, _Tp _width, _Tp _height);
_Tp _x:表示矩形左上角顶点的x坐标; _Tp _y:表示矩形左上角顶点的y坐标;
_Tp _width:表示矩形框的宽度 ; _Tp _height:表示矩形框的高度
输出图像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 源代码 #include<iostream> #include<opencv2\highgui\highgui.hpp> #include<opencv2\core\core.hpp> #include <opencv2\imgproc\imgproc.hpp>
using namespace std; using namespace cv;
int main() { Mat img, imgGray, result; img = imread("aaa.png"); int row = img.rows;
int col = img.cols * img.channels(); cout << "分辨率为:" << row << "*" << img.cols << endl; for (int i = 9; i < 12; ++i) { uchar* data = img.ptr<uchar>(i); for (int j = 9; j < 13; ++j) { cout << "第" << i + 1 << "行" << "第" << j + 1 << "列的像素值为" << int(*data) << endl; data++; } } cvtColor(img, imgGray, CV_BGR2GRAY); imshow("灰度图", imgGray); imshow("原图", img); Rect m_select = Rect(0, 0, imgGray.cols/2 ,imgGray.rows / 2); Mat ROI = imgGray(m_select); imshow("一半分辨率图", ROI);
threshold(imgGray, result, 50, 150, CV_THRESH_BINARY); imshow("二值化后的图", result); imwrite("aaa_gray.png", imgGray); cout << "图片已保存" << endl; waitKey();
return 0; }
|
本文使用 CC BY-NC-SA 3.0 中国大陆 协议许可
具体请参见 知识共享协议
本文链接:https://zyhang8.github.io/2019/09/11/cv-exp1/