有人能帮我在图像中画一个矩形吗
Can any one Help me out in Drawing a rectangle in an image?
伙计们,我是C++的新程序员,请你帮我写一个程序,在不使用OpenCV的情况下,用Visual C++在位图24位彩色图像中绘制蓝色矩形。同样在VS C++中,我无法获得一个标题图形.h,而是使用了什么shud。我必须在图像中画一个矩形而不是直线这是我在VS-C++中的代码,它只在底部显示一条黑线:
void copy_Header(FILE *,FILE *);
void main()
{
FILE *src; int offset; int width, height;
fopen_s(&src,"jaguar.bmp","rb");
FILE *dest;
fopen_s(&dest,"rect_image.bmp","wb");
fseek(src,10,SEEK_SET);
fread(&offset,4,1,src);
fseek(src,18,SEEK_SET);
fread(&width,4,1,src);
fseek(src,22,SEEK_SET);
fread(&height,4,1,src);
copy_Header(src,dest);
fseek(src,offset,SEEK_SET);
fseek(dest,offset,SEEK_SET);
unsigned char x=(unsigned char)fgetc(src);
double r,g,b,z[3];
int i;
unsigned char ch[3];
b=ch[0]=fgetc(src);
g=ch[1]=fgetc(src);
r=ch[2]=fgetc(src);
for (int j=0;j<4;j++)
{
for(; offset<width; offset++)
{
z[0]=b;
z[1]=0;
z[2]=0;
fputc(z[0],dest);
fputc(z[1],dest);
fputc(z[2],dest);
}
}
fseek(src,4096,SEEK_SET);
fseek(dest,4096,SEEK_SET);
unsigned char y= (unsigned char)fgetc(src);
while(!feof(src))
{
fputc(y,dest);
y=(unsigned char)fgetc(src);
}
fclose(src);
fclose(dest);
puts("Image Copied");
_getch();
}
void copy_Header(FILE *srcImage,FILE *dstImage)
{
unsigned char *ptrc= (unsigned char *)malloc(54*sizeof(char));
fseek(srcImage,0,SEEK_SET);
fseek(dstImage,0,SEEK_SET);
fread(ptrc,54,1,srcImage);
fwrite(ptrc,54,1,dstImage);
}
提前Thanx。图像大小为1024乘1024,是24位位图文件。
让我们来解决这个问题。
第一个问题:如何将像素坐标与其在文件中的位置联系起来?
换句话说,给定一个坐标为(x,y)的RGB像素,它在文件中的位置是什么?
让我们考虑一下它有宽度和高度。由于它有3个通道——红色、绿色和蓝色——并且考虑到每个通道有1个字节,每个像素的大小将有3个字节。BMP文件只是一个像素矩阵,逐行组织,所以每行都有3*WIDTH字节。
然后,x坐标将告诉将跳过多少行,y将指向当前行中的像素。换句话说:
seek_position= x*(3*WIDTH) + 3*y
有了这个关系,您现在可以编写一个类似的函数
int mat2seek(int x,int y){
//converts a xy coordinate system to seek position
return x*(3*WIDTH) + 3*y + BMP_HEADER_SIZE;
}
其中BMP_HEADER_SIZE是自我解释
第二个问题:既然你知道了如何将(x,y)坐标系转换为搜索系统,那么绘制矩形的算法是什么?
这种算法在(x,y)坐标中比在寻找坐标中容易得多:
for (int x = xini; x< xend; x++)
for (int y=yini; y<yend; y++){
int seek=mat2seek(x,y);
//do the magic...
}
相关文章:
- 如何在 OpenCV 中将图像与另一个图像相关联
- 计算另一个图像像素满足条件的像素值的平均值
- 由于alpha值的原因,将一个图像混合到另一个图像会产生不正确的图像
- 访问和更改基于另一个图像的像素颜色-opencv c++
- 如何在打开另一个图像时关闭图像 - linux c ++
- 在 allegro5 中的另一个图像上的图像 (C++)
- SFML 将图像从 txt 文件加载到矢量中仅加载最后一个图像
- sfml pollevent,每个新图像都会删除上一个图像
- 尝试在另一个 SDL2 上显示一个图像没有错误,但不会显示第二个图像
- 如何使用CIMG.H库在另一个图像上显示一个图像
- 这个opencv程序用于同时从一个文件夹中加载不同的图像,但它只读取一个图像
- QPixmap将绘制的正方形的内容复制到另一个图像中
- 确定一个图像是否在其他图像中的最佳方法 - opencv c ++
- 确保给定的图像被另一个图像翻转
- OpenCV将透明图像绘制到另一个图像上
- 如何使用opencv中的单应矩阵将一个点从一个图像重新投影到另一个图像
- 如何使用OpenCV在一个窗口中显示一个图像和一个视频
- 一个图像识别特征金字塔有多少步
- 如何从资源中的图像数组中获得一个图像的HBITMAP
- 如何将一个图像叠加在另一个图像上?c++