• opencv_001


    C++ OpenCV基本操作

    图像读取与显示

    图像保存

    imwrite(out_dir, src);
    

    图像色彩空间转换

    空间色彩转换函数cvtColor

    • RGB
      RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色。

    • HSV
      HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
      这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

    函数 作用
    COLOR_BGR2GRAY = 6 彩色到灰度
    COLOR_GRAY2BGR = 6 灰度到彩色
    COLOR_BGR2HSV = 6 BGR到HSV
    COLOR_HSV2BGR = 6 HSV到BGR
    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    using namespace std;
    
    int main() {
    	Mat src = imread("E:\\study\\opencv_C++\\reba.jpg");
    	if (src.empty())
    	{
    		printf("Could not load image!");
    		return -1;
    	}
    	namedWindow("normal", WINDOW_FREERATIO);
    	namedWindow("gray", WINDOW_FREERATIO);
    	namedWindow("hsv", WINDOW_FREERATIO);
    	imshow("normal", src);
    	Mat img_gray, img_hsv;
    	// 转换为灰度图像
    	cvtColor(src, img_gray, COLOR_BGR2GRAY);
    	imshow("gray", img_gray);
    	// 转换为hsv图像
    	cvtColor(src, img_hsv, COLOR_BGR2HSV);
    	imshow("hsv", img_hsv);
    	waitKey(0);
    	destroyAllWindows();
    }
    

    C++中的Mat对象

    在C++的opencv中,一切图像对象皆为Mat

    图像像素的读写操作

    点击查看代码
    // 图像像素的读写操作
    void pixel_visit_demo(Mat& image) {
    	// 获取图像的宽
    	int width = image.cols;
    	// 获取图像的高
    	int height = image.rows;
    	// 获取图像通道数
    	int channels = image.channels();
    
    	for (int row = 0; row < height; row++) {
    		for (int col = 0; col < width; col++) {
    			// 灰度图
    			if (channels == 1) {
    				// 获取像素
    				int pv = image.at<uchar>(row, col);
    				image.at<uchar>(row, col) = 255 - pv;
    			}
    
    			// 彩色图
    			if (channels == 3) {
    				Vec3b bgr = image.at<Vec3b>(row, col);
    				image.at<Vec3b>(row, col)[0] = 255 - bgr[0];
    				image.at<Vec3b>(row, col)[1] = 255 - bgr[1];
    				image.at<Vec3b>(row, col)[2] = 255 - bgr[2];
    			}
    		}
    	}
    }
    
  • 相关阅读:
    C++11:限定作用域的枚举类型
    查询Windows用户SID
    终止git merging状态
    sed追加文件内容的几种方式
    显示一个目录下所有文件名字和对应的内容
    kvm常用指令
    路由相关指令和概念理解
    打开 macOS Sierra 允许“任何来源”选项,运行第三方应用
    Flutter Tips
    C++编写的Vector3类
  • 原文地址:https://www.cnblogs.com/Gazikel/p/15834831.html
Copyright © 2020-2023  润新知