opencv3/C++图像像素操作的方法
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍了opencv3/C++图像像素操作的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇opencv3/C++图像像素操作的方法文章都会有所收获,下面我们
千家信息网最后更新 2025年11月08日opencv3/C++图像像素操作的方法
这篇文章主要介绍了opencv3/C++图像像素操作的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇opencv3/C++图像像素操作的方法文章都会有所收获,下面我们一起来看看吧。
RGB图像转灰度图
RGB图像转换为灰度图时通常使用:
进行转换,以下尝试通过其他对图像像素操作的方式将RGB图像转换为灰度图像。
#include#include using namespace cv;int main(){ //像素操作 Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(src.empty()) { printf("can not load image \n"); return -1; } namedWindow("input"); imshow("input",src); dst.create(src.size(), src.type()); for(int row = 0; row < src.rows; row++) { for(int col = 0; col < src.cols; col++) { int b = src.at (row, col)[0]; int g = src.at (row, col)[1]; int r = src.at (row, col)[2]; dst.at (row, col)[0] = max(r,max(g,b)); dst.at (row, col)[1] = max(r,max(g,b)); dst.at (row, col)[2] = max(r,max(g,b)); } } namedWindow("output"); imshow("output",dst); waitKey();}
同理使用min(r,min(g,b))可以看到由于选择了较小的灰度值图像会明显变暗:
图像线性增强
通过对图像像素操作(线性变换),实现图像的线性增强。
#include#include using namespace cv;int main(){ Mat src1, dst; src1 = imread("E:/image/image/im1.jpg"); if(src1.empty()) { printf("can not load im1 \n"); return -1; } double alpha = 1.2, beta = 50; dst = Mat::zeros(src1.size(), src1.type()); for(int row = 0; row < src1.rows; row++) { for(int col = 0; col < src1.cols; col++) { if(src1.channels() == 3) { int b = src1.at (row, col)[0]; int g = src1.at (row, col)[1]; int r = src1.at (row, col)[2]; dst.at (row, col)[0] = saturate_cast (b*alpha + beta); dst.at (row, col)[1] = saturate_cast (g*alpha + beta); dst.at (row, col)[2] = saturate_cast (r*alpha + beta); } else if (src1.channels() == 1) { float v = src1.at (row, col); dst.at (row, col) = saturate_cast (v*alpha + beta); } } } namedWindow("output",CV_WINDOW_AUTOSIZE); imshow("output", dst); waitKey(); return 0;}
掩膜操作调整图像对比度
使用一个3×3掩模增强图像对比度:
#include#include using namespace cv;int main(){ Mat src, dst; src = imread("E:/image/image/daibola.jpg"); CV_Assert(src.depth() == CV_8U); if(!src.data) { printf("can not load image \n"); return -1; } src.copyTo(dst); for(int row = 1; row<(src.rows - 1); row++) { const uchar* previous = src.ptr (row - 1); const uchar* current = src.ptr (row); const uchar* next = src.ptr (row + 1); uchar* output = dst.ptr (row); for(int col = src.channels(); col < (src.cols - 1)*src.channels(); col++) { *output = saturate_cast (9 * current[col] - 2*previous[col] - 2*next[col] - 2*current[col - src.channels()] - 2*current[col + src.channels()]); output++; } } namedWindow("image", CV_WINDOW_AUTOSIZE); imshow("image",dst); waitKey(); return 0;}
像素重映射
利用cv::remap实现像素重映射;
cv::remap参数说明:
Remap(InputArray src,// 输入图像OutputArray dst,// 输出图像InputArray map1,// 映射表1(CV_32FC1/CV_32FC2)InputArray map2,// 映射表2(CV_32FC1/CV_32FC2)int interpolation,// 选择的插值int borderMode,// 边界类型(BORDER_CONSTANT)const Scalar borderValue// 颜色 )
插值方法:
CV_INTER_NN =0, CV_INTER_LINEAR =1, CV_INTER_CUBIC =2, CV_INTER_AREA =3, CV_INTER_LANCZOS4 =4
通过像素重映射实现图像垂直翻转:
#includeusing namespace cv;int main(){ Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(src.empty()) { printf("can not load image \n"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input", src); Mat mapx,mapy; mapx.create(src.size(), CV_32FC1); mapy.create(src.size(), CV_32FC1); for(int row = 0; row < src.rows; row++) { for(int col = 0; col < src.cols; col++) { mapx.at (row, col) = col; mapy.at (row, col) = src.rows - row - 1; } } remap(src, dst, mapx, mapy, CV_INTER_NN, BORDER_CONSTANT, Scalar(0,255,255)); namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output",dst); waitKey(); return 0;}
关于"opencv3/C++图像像素操作的方法"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"opencv3/C++图像像素操作的方法"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
图像
像素
方法
灰度
知识
线性
内容
对比度
篇文章
插值
选择
明显
价值
参数
掩膜
操作简单
文章
方式
易懂
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
cric数据库 共享
参观网络安全周美篇
浪潮服务器硬盘更换
kettle 服务器
网络安全报告会心得体会
北京软件开发驻场哪家正规
学校网络安全条幅
维普网与中文科技期刊数据库关系
数据库必须要java语言吗
健康网络安全手抄报
三零一互联网络科技
数据库中导入数据库出错
戴尔服务器外接显示器接口
android手机软件开发
有关企业网络安全的英文文献
wamp配置数据库用户名
齐齐哈尔软件开发招生
小牛互联网科技
软件开发国峰好
六盘水招聘计算机网络技术
如何获取别人的网络安全密钥
百家乐游戏软件开发
科技牛产学研互联网平台
java数据库浮点数是什么
软件开发应该开什么税种发票
万象2004数据库
安全狗服务器版4.2
华为互联网科技股份
连接数据库显示网络通信异常
山西开源软件开发哪家好