接上一篇,改变像素色点还需要的知识:
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;
}
结果图:
图片的像素点被慢慢的改为黑色