OpenCV 自作绘图库函数
来源:互联网 发布:java开源投票系统 编辑:程序博客网 时间:2024/05/16 19:56
OpenCV自作库函数,方便图像处理时,方便调用:
主要函数如下:
int initgraph(int width, int height):初始化一个区域用来绘图
void setbkcolor(unsigned int color):设置绘图区域背景颜色
void Point(int x, int y, unsigned int color):在绘图区域画一个点而不立即显示
void draw_point(int x, int y, unsigned int color):在绘图区域画一个点立即显示
void draw_hline(int x0, int y0, int x1, unsigned int color) :画一条横线
void draw_vline(int x0, int y0, int y1, unsigned int color) :画一条纵线
void draw_rect(int x0, int y0, int x1, int y1, unsigned int color):画一个矩形框
void draw_line(int x1,int y1,int x2,int y2, unsigned int color):画一条任意两坐标之间的线段
void draw_rgb(char *temp, int width, int height, int x, int y):显示某一内存3通道的RGB数据图像
void draw_gray(char *temp, int width, int height, int x, int y):显示某一内存灰度图像
测试源码如下:
#include <stdio.h>#include "highgui.h"#include <time.h>//using namespace cv;#define WIN_NAME "CarId"#define RGB(a,b,c)(a << 16 | b << 8 | c)IplImage* pImg; CvSize size;char *pbmp;int initgraph(int width, int height);void setbkcolor(unsigned int color);void draw_hline(int x0, int y0, int x1, unsigned int color) ;void draw_vline(int x0, int y0, int x1, unsigned int color) ;void draw_rgb(char *temp, int width, int height, int x, int y);void draw_gray(char *temp, int width, int height, int x, int y);void draw_rect(int x0, int y0, int x1, int y1, unsigned int color);void draw_line(int x1,int y1,int x2,int y2, unsigned int color);void main(){IplImage* pbmp;initgraph(800, 700);setbkcolor(RGB(255, 255, 255));draw_hline(0, 100, 200, 0x00ff00ff);draw_vline(100, 200, 0, 0x000000);draw_line(0, 0, 200, 400, 0x000000);draw_rect(0, 0, 200, 400, 0x00ffff00); if((pbmp = cvLoadImage("baboon.jpg", 1)) != 0 ) { cvNamedWindow( "Image", 1 );//创建窗口cvShowImage( "Image", pbmp );//显示图像cvWaitKey(1); } draw_rgb(pbmp->imageData, pbmp->widthStep/3, pbmp->height, 0, 0);cvWaitKey(0);}int initgraph(int width, int height){size.height = height;size.width = width;pImg = cvCreateImage(size, 8, 3);pImg->imageData = (char *)malloc(size.height * pImg->width * 3);if(pImg->imageData == NULL){printf("initgraph alloc mem fail\n");exit(-1);}pbmp = pImg->imageData;cvNamedWindow(WIN_NAME, 1 );cvShowImage(WIN_NAME, pImg );cvWaitKey(1);return 0;}void setbkcolor(unsigned int color){int i, j;unsigned char r,g,b;for(i = 0; i < size.height; i++){for(j = 0; j < size.width; j++){r = (color >> 16) & 0xff;g = (color >> 8) & 0xff;b = color & 0xff;pImg->imageData[i * pImg->width * 3 + j * 3] = b;pImg->imageData[i * pImg->width * 3 + j * 3 + 1] = g;pImg->imageData[i * pImg->width * 3 + j * 3 + 2] = r;}}cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}void Point(int x, int y, unsigned int color){unsigned char r, g, b;if ( ( x < size.width) && ( y < size.height) ){r = (color >> 16) & 0xff;g = (color >> 8) & 0xff;b = color & 0xff;pImg->imageData[y * pImg->width * 3 + x * 3] = b;pImg->imageData[y * pImg->width * 3 + x * 3 + 1] = g;pImg->imageData[y * pImg->width * 3 + x * 3 + 2] = r;}//cvWaitKey(1);}void draw_point(int x, int y, unsigned int color){unsigned char r, g, b;if ( ( x < size.width) && ( y < size.height) ){r = (color >> 16) & 0xff;g = (color >> 8) & 0xff;b = color & 0xff;pImg->imageData[y * pImg->width * 3 + x * 3] = b;pImg->imageData[y * pImg->width * 3 + x * 3 + 1] = g;pImg->imageData[y * pImg->width * 3 + x * 3 + 2] = r;}cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}void draw_hline(int x0, int y0, int x1, unsigned int color) { int i, k;if (x0 > x1){k = x0;x0 = x1;x1 = k;}for(i = x0; i < x1; i++)Point(i, y0, color);cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}void draw_vline(int x0, int y0, int y1, unsigned int color) { int i, k;if (y0 > y1){k = y0;y0 = y1;y1 = k;}for(i = y0; i < y1; i++)Point(x0, i, color);cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}void draw_rect(int x0, int y0, int x1, int y1, unsigned int color){ draw_hline(x0, y0, x1, color); draw_hline(x0, y1, x1, color); draw_vline(x0, y0, y1, color); draw_vline(x1, y0, y1, color);}void draw_line(int x1,int y1,int x2,int y2, unsigned int color){int dx, dy, e;dx = x2-x1; dy = y2-y1; if(dx >= 0){if(dy >= 0) // dy>=0{if(dx >= dy) // 1/8 octant{e = dy - dx/2;while(x1 <= x2){Point(x1, y1, color);if(e > 0){y1 += 1;e -= dx;}x1 += 1;e += dy;}}else// 2/8 octant{e = dx - dy/2;while(y1 <= y2){Point(x1,y1,color);if(e > 0){ x1 += 1;e-= dy;}y1 += 1;e += dx;}}}else // dy<0{dy =- dy; // dy=abs(dy)if(dx >= dy) // 8/8 octant{e = dy - dx/2;while(x1 <= x2){Point(x1, y1, color);if(e > 0){y1 -= 1;e -= dx;}x1 += 1;e += dy;}}else// 7/8 octant{e = dx - dy/2;while(y1 >= y2){Point(x1, y1, color);if(e > 0){x1 += 1;e -= dy;}y1 -= 1;e += dx;}}}}else //dx<0{dx =- dx;//dx=abs(dx)if(dy >= 0) // dy>=0{if(dx >= dy) // 4/8 octant{e = dy - dx/2;while(x1 >= x2){Point(x1, y1, color);if(e > 0){y1 += 1;e -= dx;}x1 -= 1;e += dy;}}else// 3/8 octant{e = dx - dy/2;while(y1 <= y2){Point(x1, y1, color);if(e > 0){x1 -= 1;e -= dy;}y1 += 1;e += dx;}}}else // dy<0{dy =- dy; // dy=abs(dy)if(dx >= dy) // 5/8 octant{e = dy - dx/2;while(x1 >= x2){Point(x1, y1, color);if(e>0){y1 -= 1;e -= dx;}x1 -= 1;e += dy;}}else// 6/8 octant{e = dx - dy/2;while(y1 >= y2){Point(x1, y1, color);if(e > 0){x1 -= 1;e -= dy;}y1 -= 1;e += dx;}}}}cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}void draw_rgb(char *temp, int width, int height, int x, int y){int i,j; for(i = 0; i < height; i++) { for(j = 0; j < width; j++) { if((y + i < size.height) && (x + j < size.width)) {pbmp[(y + i) * pImg->width * 3 + (x + j) * 3] = temp [i * width * 3 + j * 3];pbmp[(y + i) * pImg->width * 3 + (x + j) * 3 + 1] = temp [i * width * 3 + j * 3 + 1];pbmp[(y + i) * pImg->width * 3 + (x + j) * 3 + 2] = temp [i * width * 3 + j * 3 + 2]; }} }cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}void draw_gray(char *temp, int width, int height, int x, int y){int i,j; for(i = 0; i < height; i++) { for(j = 0; j < width; j++) { if((y + i < size.height) && (x + j < size.width)) {pbmp[(y + i) * pImg->width * 3 + (x + j) * 3] = temp[i * width + j];pbmp[(y + i) * pImg->width * 3 + (x + j) * 3 + 1] = temp[i * width + j];pbmp[(y + i) * pImg->width * 3 + (x + j) * 3 + 2] = temp[i * width + j]; }} }cvShowImage( WIN_NAME, pImg );cvWaitKey(1);}
效果图如下:
1、横线、纵线、矩形框、斜线
RGB图像
- OpenCV 自作绘图库函数
- OpenCV绘图
- opencv绘图
- 【OpenCV】绘图
- opencv:绘图
- cad绘图员作总结
- 走出自作
- 自 动 操 作
- 自作标签
- 自作API doc
- cocos2d-自作动画
- 爪作自椎仔嘴资拙锥遵坐住钻鬃卒装抓左
- tank city 自作
- opencv-OpenCV中的绘图功能
- opencv 绘图功能
- OpenCV--绘图操作
- opencv之绘图
- opencv 绘图功能
- 赵雅智_ListView
- Struts2中的Action配合jQuery和Ajax操作
- hdu-2586 Y2K Accounting Bug
- ngnix 正向代理配置文件
- 收藏一个架构博客
- OpenCV 自作绘图库函数
- 泡汤
- 京东商城架构师李松林:电子商务中大数据技术
- IT项目管理
- 玩转CSS3(一)----CSS3实现页面布局
- latch:cache buffers chains的优化思路
- c#如何强制退出
- CSS浏览器兼容问题集(一)
- 一线架构师实践指南