代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
//#include <direct.h>
using namespace cv;
using namespace std;
const char* output_win = "mat-demo";
int alpha_value = 1;
int alpha_max = 100;
int beta_value = 1;
int beta_max = 100;
void Demo_Contours(int, void*);
cv::Mat src;
cv::Mat mat;
int main()
{
src = cv::imread("bin\\图片库\\Test1.jpg");//原图的分辨率是Rows:756,Cols:1008;
int channels = src.channels();
cv::Mat dst(src.rows, src.cols, CV_8UC3, Scalar(1, 1, 255)); //3 channel matrix
if (channels == 3)
{
for(int row=0;row<src.rows;row++)
for (int col = 0; col < src.cols; col++)
{
if (src.at<Vec3b>(row, col)[2] > 128)
{
dst.at<Vec3b>(row, col)[0] = 255;
dst.at<Vec3b>(row, col)[1] = 255;
dst.at<Vec3b>(row, col)[2] = 255;
}
else
{
dst.at<Vec3b>(row, col)[0] = 0;
dst.at<Vec3b>(row, col)[1] = 0;
dst.at<Vec3b>(row, col)[2] = 0;
}
}
}
namedWindow("src", CV_WINDOW_AUTOSIZE);
namedWindow(output_win, CV_WINDOW_AUTOSIZE);
imshow("src", src);
//cvtColor(src, src, CV_BGR2GRAY);
const char* trackbar_title1 = "Alpha:";
createTrackbar(trackbar_title1, output_win, &alpha_value, alpha_max, Demo_Contours);
const char* trackbar_title2 = "Beta:";
createTrackbar(trackbar_title2, output_win, &beta_value, beta_max, Demo_Contours);
Demo_Contours(0, 0);
imshow("dst", dst);
int a = mat.type();
waitKey(0);
return 0;
}
void Demo_Contours(int, void*) {
float alpha = alpha_value / 100.0;
float beta = beta_value / 100.0;
cv::Mat mat(src.rows, src.cols, CV_32FC3, Scalar(1, 1, 255)); //3 channel matrix // 获取图像宽、高
for (int row = 0; row < src.rows; row++)
for (int col = 0; col < src.cols; col++)
{
mat.at<Vec3f>(row, col)[0] = (float)(src.at<Vec3b>(row, col)[0] / 256.0); //read color values for pixel (y,x)
mat.at<Vec3f>(row, col)[1] = (float)(src.at<Vec3b>(row, col)[1] / 256.0); //read color values for pixel (y,x)
mat.at<Vec3f>(row, col)[2] = (float)(src.at<Vec3b>(row, col)[2] / 256.0); //read color values for pixel (y,x)
float b = (float)(src.at<Vec3b>(row, col)[0] / 256.0);// blue
float g = (float)(src.at<Vec3b>(row, col)[1] / 256.0); // green
float r = (float)(src.at<Vec3b>(row, col)[2] / 256.0); // red
mat.at<Vec3f>(row, col)[0] = saturate_cast<float>(b * alpha+beta);
mat.at<Vec3f>(row, col)[1] = saturate_cast<float>(g * alpha+beta);
mat.at<Vec3f>(row, col)[2] = saturate_cast<float>(r * alpha+beta);
float temp = saturate_cast<float>(r * alpha + beta);
}
imshow(output_win, mat);
}
网友评论