接上一篇,改变像素色点还需要的知识:
Get*D
返回特殊的数组元素
CvScalar cvGet1D( const CvArr* arr, int idx0 );
CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );
CvScalar cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 );
CvScalar cvGetND( const CvArr* arr, int* idx );
arr
输入数组.
idx0
元素下标第一个以0为基准的成员
idx1
元素下标第二个以0为基准的成员
idx2
元素下标第三个以0为基准的成员
idx
元素下标数组
函数cvGet*D 返回指定的数组元素。对于稀疏数组如果需要的节点不存在函数返回0 (不会创建新的节点)
Set*D
修改指定的数组
void cvSet1D( CvArr* arr, int idx0, CvScalar value );
void cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
void cvSet3D( CvArr* arr, int idx0, int idx1, int idx2, CvScalar value );
void cvSetND( CvArr* arr, int* idx, CvScalar value );
arr
输入数组
idx0
元素下标的第一个成员,以0为基点
idx1
元素下标的第二个成员,以0为基点
idx2
元素下标的第三个成员,以0为基点
idx
元素下标数组
value
指派的值
函数 cvSet*D 指定新的值给指定的数组元素。对于稀疏矩阵如果指定节点不存在函数创建新的节点
// 像素的读写.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "opencv2/opencv.hpp" int _tmain(int argc, _TCHAR* argv[]) { IplImage* image= cvLoadImage("F:\\Opencv_picture\\05.jpg", 1); CvScalar pixel; cvNamedWindow("Picture"); for(int i=0; i< image->height; i++) { for(int j=0; j<image->width; j++) { //获取像素的BGR,并显示 pixel= cvGet2D(image, i, j); //打印BGR printf("B= %f, G= %f, R= %f\n", pixel.val[0], pixel.val[1], pixel.val[2]); //修改各点的值RGB(0, 0, 0)改为黑色的像素 pixel.val[0]= 255; pixel.val[1]= 255; pixel.val[2]= 255; //用cvGet2D改变像素点 cvSet2D(image, i, j, pixel); //改变像素点就显示改变的图像 cvShowImage("Picture", image); //延时 cvWaitKey(1); } } cvReleaseImage(&image); cvDestroyWindow("Picture"); return 0; }
结果图:
图片的像素点被慢慢的改为黑色