[w 5 d 4]ビデオ輝度の調整
(Ubuntu 18.04.6 LTS)
2022.03.17
C++、VSコードを使用
プログラマー自主走行Defcos 3期
経過時間、特に関数を測定するのに要する時間のクラスを測定します.
mean(src + (128 - m) = mean(src) + mean( 128 - m ) = m + 128 - m = 128
これは、ビデオ特定領域の対応する部分の平均値を取得し、ビデオ輝度全体を調整するコードである.
2022.03.17
C++、VSコードを使用
プログラマー自主走行Defcos 3期
Tickmeter
経過時間、特に関数を測定するのに要する時間のクラスを測定します.
cv::TickMeter tick;
tick.start();
func1(); // 무언가 함수 실행
tick.stop();
std::cout << tick.getTimeMilli() << std::endl;
画像の明るさを調整する
#include <iostream>
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat src = cv::imread("./resources/lenna.bmp", cv::IMREAD_GRAYSCALE);
if (src.empty()) {
std::cerr << "Image load failed!" << std::endl;
return -1;
}
cv::Mat dst1 = src + 100;
// src 객체의 밝기를 100 증가시킨 값 저장
//dst1 = src + cv::Scalar(100)으로 해석되어 Saturation 수행(255 넘으면 255)
int m = int(cv::mean(src)[0]);
// cv::mean은 Mat 객체의 평균값을 cv::Scalar 타입으로 리턴함.
// gray scale image를 사용할 경우 첫번째 값만 의미있으므로 [0] 사용.
std::cout << "Mean value: " << m << std::endl;
float alpha = 1.0f;
cv::Mat dst2 = src + (src - m) * alpha;
// 평균을 유지한 상태에서 밝기 대조. alpha가 클수록 더 높은 대조를 보임.
cv::Mat dst3 = src + (128 - m);
// 평균을 128로 만들고 contrast
// img show
cv::imshow("src", src);
cv::imshow("dst1", dst1);
cv::imshow("dst2", dst2);
cv::imshow("dst3", dst3);
cv::waitKey();
}
dst 3の平均値を計算し、128が平均値であると判断することができる.mean(src + (128 - m) = mean(src) + mean( 128 - m ) = m + 128 - m = 128
トラックバーを使用してビデオの輝度を調整
#include <iostream>
#include "opencv2/opencv.hpp"
void on_level_change(int pos, void*userdata);
int main()
{
cv::Mat src;
src = cv::imread("./resources/lenna.bmp",cv::IMREAD_GRAYSCALE);
cv::namedWindow("image");
cv::createTrackbar("level","image",0,200,on_level_change,(void*)&src);
cv::setTrackbarPos("level","image",100);
cv::imshow("image",src);
cv::waitKey();
}
void on_level_change(int pos, void*userdata){
cv::Mat img;
img = (*(cv::Mat*)userdata)+(pos-100);
cv::imshow("image",img);
}
trackbarを使用してtrackbar値-100の輝度を向上させるコード.ビデオの明るさを調整
これは、ビデオ特定領域の対応する部分の平均値を取得し、ビデオ輝度全体を調整するコードである.
#include <iostream>
#include "opencv2/opencv.hpp"
int main()
{
cv::VideoCapture cap("./resources/base_camera_dark.avi");
if (!cap.isOpened()){
std::cerr << "Video load failed!" << std::endl;
return -1;
}
cv::Mat frame,gray,dst;
//making mask
cv::Mat mask=cv::Mat::zeros(cap.get(cv::CAP_PROP_FRAME_HEIGHT),cap.get(cv::CAP_PROP_FRAME_WIDTH),CV_8UC1);
std::vector<cv::Point> pts;
pts.push_back(cv::Point(240,280));
pts.push_back(cv::Point(400,280));
pts.push_back(cv::Point(620,440));
pts.push_back(cv::Point(20,440));
cv::fillPoly(mask,pts,255);
while (true){
cap >> frame;
if (frame.empty()){
std::cout << "frame empty!" << std::endl;
break;
}
cv::cvtColor(frame,gray,cv::COLOR_BGR2GRAY);
cv::polylines(frame,pts,true,cv::Scalar(255,0,0),2);
double mean_val = cv::mean(gray,mask)[0];
dst = gray + (128 - mean_val);
cv::imshow("frame",frame);
cv::imshow("gray",gray);
cv::imshow("dst",dst);
if (cv::waitKey(10)==27){
break;
}
}
std::cout << frame.rows << "," << frame.cols << std::endl;
cap.release();
return 0;
}
Reference
この問題について([w 5 d 4]ビデオ輝度の調整), 我々は、より多くの情報をここで見つけました https://velog.io/@anecjong/w5d4-VideoCapture-그리기-함수-Trackbarテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol