opencv基础知识学习 -- 代码练习一
// 显示图像 void CV120201012Dlg::showImg() { // 加载一幅图像 Mat src = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png", IMREAD_GRAYSCALE); //判断是否加载成功 if (src.empty()) { MessageBox(_T("加载图像失败!"),_T("Error")); // } else { namedWindow("opencv lodeImg demo", WINDOW_AUTOSIZE); imshow("opencv lodeImg demo", src); // 显示图像 waitKey(0); } } // 改变图像参数 void CV120201012Dlg::changeImg() { // 创建院士图像 Mat src = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png"); // 创建一个显示窗口 namedWindow("change img",WINDOW_AUTOSIZE); // 定义一个变量作为转换之后的图像 Mat out_IMG; cvtColor(src,out_IMG,COLOR_BGR2GRAY); // 显示 imshow("change img", out_IMG); // 保存图像 imwrite("E:\\PR\\resource\\picture\\2.tiff", out_IMG); } // 图像掩膜 void CV120201012Dlg::yanMo() { // 加载图像 Mat mImg = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png"); if (!mImg.data) { MessageBox(_T("图像加载失败!"),_T("error")); return; } // 加载一个窗口 namedWindow("YanMo window test", WINDOW_AUTOSIZE); // 显示 imshow("YanMo window test",mImg); } // 创建一幅新图像 void CV120201012Dlg::createNew() { Mat m1 = Mat::zeros(Size(400,400),CV_8UC1); m1 = Scalar(0,0,255); imshow("创建窗口",m1); waitKey(0); } //克隆复制 void CV120201012Dlg::imgCopy() { Mat m1 = Mat::zeros(Size(400, 400), CV_8UC1); m1 = Scalar(0, 0, 255); Mat m2, m3; m2 = m1.clone(); imshow("创建窗口2", m2); m1.copyTo(m3); imshow("创建窗口3", m3); waitKey(0); } // 像素读写演示 void CV120201012Dlg::PixlShow() { // 读取一幅图像 Mat m1 = imread("E:\\PR\\resource\\picture\\2020-10-11_224039.png"); if (!m1.data) { MessageBox(_T("图像加载失败!"),_T("error")); return; } // 获取图像的 行 列 值 int width = m1.cols; int height = m1.rows; int channel = m1.channels(); // 遍历行列的像素 -- 数组 //for (int i = 0;i < height;i++) //{ // for (int j = 0;j < width;j++) // { // // 判断是 单通道还是3通道 // if (channel == 1) // { // // 获取每个点的像素值 // int pv = m1.at<uchar>(i, j); // // 改变每个点的像素值 // m1.at<uchar>(i, j) = 255 - pv; // 像素值反转 // } // if (channel == 3) // { // Vec3b pv = m1.at<Vec3b>(i, j); // m1.at<Vec3b>(i, j)[0] = 255 - pv[0]; // m1.at<Vec3b>(i, j)[1] = 255 - pv[1]; // m1.at<Vec3b>(i, j)[2] = 255 - pv[2]; // } // } //} // 遍历行列的像素 -- 指针 for (int i = 0;i < height;i++) { // 定义当前行指针 uchar* pr = m1.ptr<uchar>(i); for (int j = 0;j < width;j++) { // 判断是 单通道还是3通道 if (channel == 1) { // 获取每个点的像素值 int pv = *pr; // 改变每个点的像素值 *pr++ = 255 - pv; } if (channel == 3) { *pr++ = 255 - *pr; *pr++ = 255 - *pr; *pr++ = 255 - *pr; } } } imshow("像素读写",m1); waitKey(0); }
涉及到的相关函数解释,参见https://www.cnblogs.com/nannanzi/articles/13833134.html

浙公网安备 33010602011771号