五.使用OpenCv操作图像上每一个像素点
来源:互联网 发布:适合初学者的php集成 编辑:程序博客网 时间:2024/04/28 20:48
本文记录使用OpenCv操作图像上每一个像素点,用摄像头采集(拍照)或者直接加载一副图像后,树莓派系统会在内存中为这幅图像分配内存空间,通过定义的IplImage结构体指针指向这块内存空间就方便可以操控它。因为IplImage结构体中定义了很多内部变量,代表图像的属性,具体如下:
CvScalar就是一个包含四个元素的结构体变量。
CvScalar定义可存放1—4个数值的数值,其结构如下。
typedef struct CvScalar
{
double val[4];
}CvScalar;
================================================================
CvScalar pt;
如果使用的图像是1通道的,则pt.val[0]中存储数据
如果使用的图像是3通道的,则pt.val[0],pt.val[1],pt.val[2]中存储数据
补充:很多人不理解通道是什么?这里做出个人理解:所谓单通道就是一个像素点占一个字节(8位)
所以单通道图像为灰度图像,OpenCv的通道可以是1、2、3、4。而三通道即一个像素点占3个字节,
三通道的图像为彩色图像。
注意:
1.在内存中彩色图像存储顺序为BGR 不是RGB!
2.注意IplImage结构体中的widthStep分量的意思是一行图像所占的字节数。和width不一样,width指的是
一行上的像素点数,而widthStep是一行所占的字节数(以字节为单位)。因此,通过上面说的单通道和多
通道的区别,聪明的你肯定知道了。
===============================================================
使用cvGet2D 函数获得某个点的值,idx0=hight 行值,idx1=width 列值。
CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );
使用cvSet2D 函数给某个点赋值。
CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
-----------------------------------------------
由上可见,cvGet2D的返回类型和cvSet2D中value的类型都是CvScalar
#include <stdio.h>#include <stdlib.h>#include "opencv/cv.h"#include "opencv/highgui.h"int main(){int i,j;CvScalar pixel;IplImage* img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//我打开的图像为3通道for(i=0; i<img->width; i++){pixel = cvGet2D(img, (img->height)/2, i);//中间一行pixel.val[0] = 255;//255是白色pixel.val[1] = 0;pixel.val[2] = 0;cvSet2D(img, (img->height)/2, i, pixel);//cvSet2D设置像素点}printf("Height:%d Width:%d\n", img->height, img->width);cvSaveImage("tmp.jpg", img, 0);cvReleaseImage(&img);return 0;}
运行后发现图像中间有一行变为全白色。
- 五.使用OpenCv操作图像上每一个像素点
- 毕业课题---使用opencv操作每一个像素点
- opencv——操作图像中每一个像素
- Python-OpenCV图像像素点操作
- Opencv像素点操作--图像加减
- 用opencv读取图像的每个像素值,鼠标点击获取每一个点,并显示像素
- Python-OpenCV 处理图像(三):图像像素点操作
- Python-OpenCV 处理图像(三):图像像素点操作
- Python-OpenCV 处理图像(三):图像像素点操作
- 图像的像素点操作【OpenCV学习笔记3】
- opencv入门笔记之二 操作图像像素点
- OpenCV 访问图像像素点
- opencv中遍历每一个像素点进行处理
- Python-OpenCV 处理图像(二)(三):滤镜和图像运算 图像像素点操作
- 图像的像素点操作
- 使用OpenCV从图像上读取像素坐标位置
- opencv中遍历图像每个像素点
- 使用OpenCV获取图像中某一点的像素值和修改某一点的像素值
- 点led灯(进阶)——汇编
- AMD OpenCL 大学课程
- Asp.net—response对象与request对象
- JVM性能优化
- hadoop2.2.0安装中遇到的错误:mapreduce.shuffle set in yarn.nodemanager.aux-services is invalid
- 五.使用OpenCv操作图像上每一个像素点
- C column of Pointer <0>
- Java输入输出
- Extjs4.2 Grid左右抖动问题
- WPF Drawing Performance
- Eclipse maven-archetype-quickstart
- android 读取文件
- 懒人服务器 - 教程二、了解配置文件
- android 链接mysql数据库