void QuickDemo::operators_demo(Mat& image) { //Mat dst; //dst = image + Scalar(50, 50, 50); //针对三通道的图 //dst image + Scalar(50); //针对单通道的图 //dst = image - Scalar(50, 50, 50); //针对三通道的图 //dst image - Scalar(50); //针对单通道的图 Mat dst; Mat m = Mat::zeros(image.size(), image.type()); m = Scalar(2, 2, 2); multiply(image, m, dst); //乘法操作 int w = image.cols; //获得图像的宽 int h = image.rows; //获得图像的高 int dims = image.channels(); //获得图像通道的数量 for (int row = 0; row < h; row++) { uchar* current_row = image.ptr<uchar>(row); //获取当前行的指针 for (int col = 0; col < w; col++) { Vec3b p1 = image.at<Vec3b>(row, col); Vec3b p2 = m.at<Vec3b>(row, col); dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(p1[0] + p2[0]); //将和的范围控制在0-255之间 dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(p1[1] + p2[1]); dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(p1[2] + p2[2]); } } //add(image, m, dst); //subtract(image, m, dst); /*divide(image, m, dst); multiply(image, m, dst);*/ imshow("加法操作", dst); }