Opencv--像素值变化后的图像显示
来源:互联网 发布:saas多租户数据库设计 编辑:程序博客网 时间:2024/05/16 14:16
灰度图转为彩色图, 并不知道 RGB 与 灰度 的比例关系,只能简单地 设 一点的 R=G=B=灰度;
就算转成功了,看上去还是灰色。
<span style="font-size:18px;">if (img.type()==CV_8UC1) { //input image is grayscale cvtColor(img, cimg, CV_GRAY2RGB); } else { //input image is colour }</span>
在一个项目中,我调试一个改变像素的图像的程序,发现:当格式是jpg的时候不一定能更新,也就是说三通道确实是改变了,但图像却不会改变。身为菜鸟的我也不知道原因为什么jpg有时候不能显示,但根据调试,格式为bmp的是可以实现的。格式为bmp的是可以实现的。格式为bmp的是可以实现的。重要的事情说3遍!!!
另外一个牢记的知识点:在使用cvGet2D函数获得操作目标并运行后,一定要使用cvSet2D来设置RGB。
简单介绍一下cvGet2D:
cvget2d函数:返回特殊的数组元素;
CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );
arr:输入数组.
idx0:元素下标第一个以0为基准的成员;
idx1:元素下标第二个以0为基准的成员;
idx2:元素下标第三个以0为基准的成员;
idx:元素下标数组
函数cvGet*D 返回指定的数组元素。对于稀疏数组如果需要的节点不存在函数返回0 (不会创建新的节点)
同样,用cvSet2D即可设置图片的RGB值。
参考实例如下:
CvScalar s;for(y = 0; y < img->height; y++) {for(x = 0; x < img->width; x++) {s = cvGet2D(img, y, x);}}
贴上代码:
#include <stdio.h>#include <cv.h>#include <highgui.h>using namespace std;using namespace cv;int main(){IplImage* pFrame = NULL; IplImage* pFrImg = NULL;cvNamedWindow("三通道操作",1);IplImage* image=cvLoadImage("board.bmp",0);//按照图片本身的格式操作//cvShowImage("图像显示",image); for (int i = 0; i <image->height; i++) { for (int j = 0; j <image->width; j++) { //间接访问 CvScalar s=cvGet2D(image,i,j); //其中i代表y轴(第i行),即height;j代表x轴(第j列),即width。 //if((s.val[1]<150)||(s.val[1]>170)) //s.val[1]=0;s.val[0]=123;s.val[1]=123;s.val[2]=123;cout<<"B="<<s.val[0]<<setw(5)<<"G="<<s.val[1]<<setw(5)<<"R="<<s.val[2]<<endl; } } cvShowImage("图像显示",image);cvWaitKey(0);cvReleaseImage(&image);cvDestroyWindow("图像显示");return 0;}
看看结果:
当然这是作为 IPlImage形式来做的。现在都已经用Mat矩阵操作量了。至于为什么是灰度图,三个通道相等。改变通道后会直接在图像中改变,不需要更新函数。
贴上操作后代码:
#include <stdio.h>#include <cv.h>#include <highgui.h>using namespace std;using namespace cv;int main(){IplImage* pFrame = NULL; IplImage* pFrImg = NULL;cvNamedWindow("三通道操作",1);IplImage* image=cvLoadImage("board.bmp",1);//按照图片本身的格式操作,0是强制灰度图//cvShowImage("图像显示",image); for (int i = 0; i <image->height; i++) { for (int j = 0; j <image->width; j++) { //间接访问,设置图片RGB CvScalar s=cvGet2D(image,i,j); //其中i代表height;j代表width。 if((s.val[0]<150)||(s.val[0]>170)) s.val[0]=0;//s.val[0]=123;s.val[1]=123;s.val[2]=123;cout<<"B="<<s.val[0]<<setw(5)<<"G="<<s.val[1]<<setw(5)<<"R="<<s.val[2]<<endl;cvSet2D(image,i,j,s); } } //cvSaveImage("图像显示",image);cvShowImage("图像显示",image);cvWaitKey(0);cvReleaseImage(&image);cvDestroyWindow("图像显示");return 0;}
0 0
- Opencv--像素值变化后的图像显示
- opencv 图像像素点的值获取与显示
- opencv动态显示图像像素值
- 用opencv读取图像的每个像素值,鼠标点击获取每一个点,并显示像素
- opencv 保存灰度图像的像素值
- opencv 保存灰度图像的像素值
- OpenCV访问修改图像的像素值
- opencv获取图像的像素值
- opencv修改图像的像素值
- opencv 中图像像素的读取与显示
- 利用OpenCV鼠标事件设置函数setMouseCallback显示图像像素的RGB、HSV和坐标值!
- OPENCV系列(一)读取图像中任意点的像素值,并显示坐标
- opencv 图像读取显示和像素操作
- OpenCV遍历彩色图像、灰度图像的像素值方法
- MFC中用OpenCV显示图像,并跟踪鼠标显示图像的坐标与像素
- opencv读取图像像素值
- opencv图像像素值读取
- opencv读取图像像素值
- android SQLiteHelper对数据库的操作
- android 2.3系统闹钟中 重复项的思路
- 【HDU 5145】 NPY and girls(组合+莫队)
- 手把手教你使用Git
- 设计原则(安卓图片类)
- Opencv--像素值变化后的图像显示
- 理解ThreadLocal
- ios 系统地图
- slf4j-api、slf4j-log4j12以及log4j之间什么关系?
- (JavaCard) 技术入门 1 -- 名词普及
- 设计模式之外观模式
- Nginx重新编译添加模块
- sdut 2797 电影节(并查集)
- iOS NSURLSession 详解