You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

55 lines
1.5 KiB

#include "opencv2/opencv.hpp"
#include <iostream>
#include <time.h>
#include <fstream>
void reMap(cv::Mat src, cv::Mat dst, cv::Mat gray, cv::Mat hist)
{
for (int i = 0; i < src.rows * src.cols; i++)
{
if (gray.data[i] == 0)
{
dst.data[i * 3] = 0;
dst.data[i * 3 + 1] = 0;
dst.data[i * 3 + 2] = 0;
}
else
{
dst.data[i * 3] = src.data[i * 3] * hist.data[i] / gray.data[i];
dst.data[i * 3 + 1] = src.data[i * 3 + 1] * hist.data[i] / gray.data[i];
dst.data[i * 3 + 2] = src.data[i * 3 + 2] * hist.data[i] / gray.data[i];
}
}
}
int main()
{
cv::VideoCapture cap;
cap.open("/home/zara/让子弹飞.flv");
cv::VideoWriter writer("app0.mp4", cv::VideoWriter::fourcc('m', 'p', '4', 'v'), 30, cv::Size(int(cap.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_WIDTH)), int(cap.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_HEIGHT))));
cv::Mat image;
cv::Mat gray;
cv::Mat hist;
cv::Mat dst(int(cap.get(4)),int(cap.get(3)),CV_8UC3);
dst.data = (unsigned char *)malloc(int(cap.get(3) * cap.get(4)) * 3);
while (cap.read(image))
{
cv::cvtColor(image, gray, cv::COLOR_RGB2GRAY);
cv::equalizeHist(gray, hist);
reMap(image, dst, gray, hist);
cv::imshow("default",dst);
writer.write(dst);
if (cv::waitKey(2) == 'q')
{
break;
}
}
writer.release();
cap.release();
image.release();
}