#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
必须包含的头文件! 才能开始编写代码
读取相片 一般来说加个保护程序 不至于出error和卡死
Mat image = imread("test.webp"); //存放自己图像的路径 if (image.empty()){printf("could not load image...\r\n");return -1;}
创造一个Mat形的变量(手动的灰度制作)
int h = image.rows;int w = image.cols;//grayMat graymat;graymat.create(h, w, CV_8UC1);for (int j = 0; j < h; j++) {for (int i = 0; i < w; i++) {int grayvalue = (image.at<Vec3b>(j, i)[0] + image.at<Vec3b>(j, i)[1] + image.at<Vec3b>(j, i)[2]) / 3;graymat.at<uchar>(j, i) = grayvalue;}}imshow("显示图像2",graymat);waitKey(0);destroyAllWindows();
其中有个操作每点操作像数值的操作 需要学习
graymat.at<uchar>(j, i)
这是一个像素点的值,也就是如果为RGB的话,那么也是三个通道的,只有灰度才能直接用,因为灰度就一个值。如果是RGB就需要如下使用各个通道0 1 2
image.at<Vec3b>(j, i)[0]
如下是手动制作二进制图,就是遍历每个像素,判断阈值进行0和255的赋值罢了
Mat binarymat;binarymat.create(h, w, CV_8UC1);for (int j = 0; j < h; j++) {for (int i = 0; i < w; i++) {if (graymat.at<uchar>(j, i) > 100) { binarymat.at<uchar>(j, i) = 255;}else {binarymat.at<uchar>(j, i) = 0;}}}
效果图:
第一期学习结束!