OpenCV自带例子(四)改变一张图片的对比度与亮度

本文介绍了一种基本的线性变换技术,用于调整图像的亮度和对比度。通过输入用户定义的α(对比度)和β(亮度)值,实现对图像像素的调整,确保结果图像的像素值始终在0到255之间。

对于第i行第j个像素

g(i,j) = alpha * f(i,j) + beta


alpha 对应着对比度

beta 对应着亮度

#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;

double alpha; /**< Simple contrast control */
int beta; /**< Simple brightness control */

int main( int argc, char** argv )
{
	/// Read image given by user
	Mat image = imread( argv[1] );
	Mat new_image = Mat::zeros( image.size(), image.type() );
	/// Initialize values
	std::cout<<" Basic Linear Transforms "<<std::endl;
	std::cout<<"-------------------------"<<std::endl;
	std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha;
	std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta;
	/// Do the operation new_image(i,j) = alpha*image(i,j) + beta


	//image.convertTo(new_image, -1, alpha, beta);也可以使用这个函数代替for循环,同样的效果
	for( int y = 0; y < image.rows; y++ )
	{ 
		for( int x = 0; x < image.cols; x++ )
		{ 
			for( int c = 0; c < 3; c++ )
			{
				new_image.at<Vec3b>(y,x)[c] =
				saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );
				//saturate_cast 保证数据是0到255之间
			}			
		}
	}
	/// Create Windows
	namedWindow("Original Image", 1);
	namedWindow("New Image", 1);
	/// Show stuff
	imshow("Original Image", image);
	imshow("New Image", new_image);
	/// Wait until user press some key
	waitKey();
	return 0;
}



### 使用 Python 和 OpenCV 在图像中添加时间戳 为了在图像上添加时间戳,可以利用 `datetime` 库获取当前的时间字符串,并通过 `cv2.putText()` 方法将其绘制到图像上。下面是一个完整的例子来展示这一过程[^1]。 ```python import datetime import cv2 import numpy as np def add_timestamp_to_image(image_path): # 加载图片 img = cv2.imread(image_path) # 获取当前时间作为时间戳 time_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 判断背景颜色决定文字颜色 region_of_interest = img[700:780, 900:950] avg_color_per_row = np.average(region_of_interest, axis=0) avg_color = np.average(avg_color_per_row, axis=0) if avg_color > 128: text_color = (0, 0, 0) # 黑色字体 else: text_color = (255, 255, 255) # 白色字体 # 将时间戳写入图片指定位置 font_face = cv2.FONT_HERSHEY_SIMPLEX bottom_left_corner_of_text = (900, 700) font_scale = 0.8 line_type = 2 cv2.putText( img, time_str, bottom_left_corner_of_text, font_face, font_scale, text_color, line_type ) return img image_with_timestamp = add_timestamp_to_image(r"C:\Users\sbdya\Desktop\img\20180208_204710_537514.jpg") cv2.imshow("Image with Timestamp", image_with_timestamp) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码定义了一个函数 `add_timestamp_to_image`, 它接受一张图片路径作为参数,在该图片右下角附近的位置加上了实时的时间戳信息。如果目标区域内的平均亮度较高,则采用黑色的文字;反之则使用白色文字以确保良好的对比度和可读性。 对于视频处理中的每一帧也可以应用相同的方法来添加时间戳。当从摄像头或者其他视频源捕获数据时,还可以直接访问每帧自带的时间戳属性(例如使用 `cap.get(cv.CAP_PROP_POS_MSEC)`),这有助于记录更精确的时间信息[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值