【OpenCV】简单例子之图形绘画

首先先声明本人也是刚刚开始学习OpenCV,希望我能与大家一起分享交流学习经验哈。

 

最近学了一些OpenCV的一些简单例子,希望能够帮助我们这些OpenCv初学者。

 

首先OpenCV还不会安装和配置的娃可以参考我的另一篇博客http://blog.jhonse.com/index.php/archives/1073.jhonse

 

这篇主要是说OpenCV中一些简单的图型绘画

 

#include "cv.h"

#include "highgui.h"

#pragma comment(lib,"cv.lib")

#pragma comment(lib,"highgui.lib")

#pragma comment(lib,"ml.lib")

#pragma comment(lib,"cvcam.lib")

#pragma comment(lib,"cvaux.lib")

#pragma comment(lib,"cxcore.lib")

int main(int argc ,char**argv){

IplImage *img=cvCreateImage(cvSize(500,500),8,3); //新建一张图片;

cvRectangle(img,cvPoint(20,20),cvPoint(40,80),cvScalar(0,255,0),2); // 画矩形;

cvCircle(img,cvPoint(200,200),100,cvScalar(255,0,0),3); //画圆;

cvLine(img,cvPoint(0,0),cvPoint(500,500),cvScalar(0,0,255),1);//画直线;

//绘制多边形;

/*void cvPolyLine( CvArr img, CvPoint ** pts, int * npts, int contours, int is_closed,

CvScalar color, int thickness=1, int line_type=8, int shift=0 );*/

CvPoint curve1[]={10,10, 10,100, 100,100, 100,10}; //折线1;

CvPoint curve2[]={200,200, 200,230, 230,230, 230,200, 250,180}; //折线2;

CvPoint* curvepts[2]={curve1,curve2}; //两条折线;

int npts[]={4,5}; //折线顶点个数;

int contorus=2; //折线线段数;

int is_closed=1; //多边形是否封闭,1:封闭 0:不封闭;

int linewidth=3; //线条的宽度;

cvPolyLine(img,curvepts,npts,contorus,is_closed,cvScalar(255,0,0),linewidth);//绘制多边形的函数;

//Ps: pts 必须用指针数组表示; npst 也必须用数组表示;

cvFillPoly(img,curvepts,npts,contorus,cvScalar(34,189,234));

//写字

CvFont font;

double hScale=1.0; //字体水平比例;

double vScale=1.0; //字体垂直比例;

int lineWidth=1; //字体线宽;

cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC,hScale,vScale,0,lineWidth);/*初始化字体;

其中用‘0’表示的那个参数为:字体是否倾斜 0表示正常,1表示倾斜*/

cvPutText(img,"My first OpenCV programming",cvPoint(20,300),&font,cvScalar(34,234,87));//输出;

cvNamedWindow("win"); //创建窗口;

cvShowImage("win",img); //显示窗口

cvWaitKey(0); //等待键入

cvSaveImage(".\\draw.jpg",img); //保存图片;

cvReleaseImage(&img); //释放图片;

cvDestroyWindow("win"); //销毁窗口;

return 0;

}

 

效果图。。。。

 

如果有问题请联系我 QQ1915699835 email:1915699835@qq.com

很高兴能与你们交流啊;

【OpenCV】简单例子之彩图转化为灰度图

首先先声明本人也是刚刚开始学习OpenCV,希望我能与大家一起分享交流学习经验哈。

 

最近学了一些OpenCV的一些简单例子,希望能够帮助我们这些OpenCv初学者。

 

首先OpenCV还不会安装和配置的娃可以参考我的另一篇博客http://blog.jhonse.com/index.php/archives/1073.jhonse

 

这篇主要说的是将彩色图转换为灰度图片;

 

#include"cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"ml.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"cxcore.lib")

int main(){
IplImage * src=0;

src=cvLoadImage(".\\hobe.jpg"); //导入图片;
if(!src) {cout<<"fail to load image";exit(0);} //条件判断;

int height=src->height; //获取导入图片的宽和高;
int width=src->width;

uchar* data=(uchar*)src->imageData; //获取图片的数据;
int channels=src->nChannels; //获取图片的通道数;
int step=src->widthStep; //获取图片单行的总字节数;

IplImage * gray=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);//创建一张用来存放灰度图片的IplImage指针;
uchar* gray_data=(uchar*)gray->imageData; //获取图片的数据;

 

/*************将彩色图片转化为灰度图片的两种方法*********/

#include"cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"ml.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"cxcore.lib")   

int main(){
   IplImage * src=0;

   src=cvLoadImage(".\\hobe.jpg");         //导入图片;
   if(!src) {cout<<"fail to load image";exit(0);} //条件判断;

   int height=src->height;   //获取导入图片的宽和高;
   int width=src->width;

   uchar* data=(uchar*)src->imageData;  //获取图片的数据;
   int channels=src->nChannels;          //获取图片的通道数;
   int step=src->widthStep;           //获取图片单行的总字节数;

    IplImage * gray=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);//创建一张用来存放灰度图片的IplImage指针;
    uchar* gray_data=(uchar*)gray->imageData;  //获取图片的数据;

 

 /*************将彩色图片转化为灰度图片的两种方法*********/

//方法1:用cvCvtColor(src,dst,code) //code=CV_<X>2<Y> <X>,<Y>=RGB,BGR,GRAY,HSV,XYZ,HLS,Luv....;

//ps: 通道必须为1;就是IplImage * gray=cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);中把3改成1;//cvCvtColor(src,dst,CV_BGR2GRAY); //你可以把注释符号去掉试试看 ;

 

//方法2:直接转化;
//ps:通道数必须和彩色图(即src)一样 都是3;

 

for(unsigned i=0;i<height;i++){
for(unsigned j=0;j<width;j++)
{
for(unsigned k=0;k<channels;k++)
gray_data[i*step+j*channels+k]=data[i*step+j*channels+0]*0.114
+data[i*step+j*channels+1]*0.587+data[i*step+j*channels+3]*0.299; //转换为灰度图像;

}
}
/* int c=img->nChannels;
cout<<c;
*/
cvNamedWindow("win",1); //创建窗口;
cvMoveWindow("win",50,50); //移动窗口;

cvShowImage("win",gray); //显示图片;
cvWaitKey(0); //等待键入;
cvSaveImage(".\\hobe_after_transition.jpg",gray);
cvReleaseImage(&src); //释放图片;
cvReleaseImage(&gray);
return 0;
}

 

 

效果图

 

 

图片的话你们自己弄一张把。就是注意路径哦;

 

如果有问题请联系我 QQ1915699835 email:1915699835@qq.com

很高兴能与你们交流啊;

 

【OpenCV】简单例子之图片反转

最近学了一些OpenCV的一些简单例子,希望能够帮助我们这些OpenCv初学者。

首先OpenCV还不会安装和配置的娃可以参考我的另一篇博客http://blog.jhonse.com/index.php/archives/1073.jhonse

 

#include"cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
#pragma comment(lib,"cv.lib") //这些连接库可以放在工程设置里的。不懂的可以看一下的上面的那个安装配置地址;
#pragma comment(lib,"highgui.lib")
#pragma comment(lib,"ml.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"cxcore.lib")   

int main(){
   IplImage * img=0;  //创建一个图片类型的对象(说实话这个东西我也说的不是很清楚反正记得他是用来放图片的把)

   img=cvLoadImage(".\\lena.jpg");//导入图片(注意图片的路径 我这是当前目录下注意要用‘\\’表示'\');
   if(!img) {cout<<"fail to load image<<endl";exit(0);} //判断图片是否成功导入;
   int height=img->height;           //获取图片的高;
   int width=img->width;              //获取图片的宽;
   uchar* data=(uchar*)img->imageData;  //获取图片的数据;
   int channels=img->nChannels;          //获取图片的通道数;
   int step=img->widthStep;           //获取图片单行的总字节数;

   cvNamedWindow("win",2);     //创建窗口;
   cvMoveWindow("win",50,50);   //移动窗口;

   for(unsigned i=0;i<height;i++){
      for(unsigned j=0;j<width;j++)
  {
  for(unsigned k=0;k<channels;k++)
        data[i*step+j*channels+k]=255-data[i*step+j*channels+k];  //图片反转;
  }
   }

   cvShowImage("win",img);  //显示图片;
   cvWaitKey(0);          //等待键入;
   /*如果没有这一句图片就闪一下就关掉了, 这个就是让程序运行到这停下来,这样我们才能看得见图片*/

   cvSaveImage(".\\lena_after_transition.jpg",img);//保存图片(我这也是当前目录下)
   cvReleaseImage(&img);  //释放图片;必须释放 不然导致内存泄漏的;
return 0;
}

图片的话你们自己弄一张把。就是注意路径哦;

如果有问题请联系我 QQ1915699835 email:1915699835@qq.com

很高兴能与你们交流啊;