Chapt3.2 习题解答
原题:设定三通道二维矩阵,size(100,100),初始化为0,画圆。
为了体现 *img 和 mat 的不同,特将 width =30, height = 50;
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
void main()
{
// 宽度和高度的不同是为了体现 *img 和 mat的不同
const int width=30;
const int height=50;
// 注意: cvSize(width, height)
IplImage* img=cvCreateImage(cvSize(width,height),8,3);
cvZero(img);
// 中心点(15,25)画圆,半径10,红色、线宽1、8连通、0偏移
cvCircle(img,cvPoint(width/2,height/2),10,CV_RGB(255,0,0),1,8,0);
cvNamedWindow("img");
cvShowImage("img",img);
// data数组为 mat矩阵进行初始化 size( 100, 100)* 3中的3表示 3层。
int data[width*height*3]={0};
// 注意: ( height, width )
CvMat mat = cvMat(height,width,CV_8UC3,data);
// 中心点(15,25)画圆,半径10,绿色、线宽1、8连通、0偏移
cvCircle(&mat,cvPoint(width/2,height/2),10,CV_RGB(0,255,0),1,8,0);
cvNamedWindow("mat");
cvShowImage("mat",&mat);
cvWaitKey(0);
}
const int width=30;
const int height=50; 中const 是为了设定data数组大小所需。
CV_RGB(255,0,0)红色;
CV_RGB(0,255,0)绿色;
CV_RGB(0,0,255)蓝色。
运行结果:img: 红色圆圈黑背景; mat:绿色圆圈黑背景。
注意:mat里的数据类型 8UC3,如果用16SC3,则显示图像为灰色,且没有圆圈。
个人分析:opencv调用cvShowImage()时,默认只能正常显示8位无符号数据。