我使用C语言的文件处理工具多次打开.txt
文件。但是当我尝试使用与文本文件相同的过程打开图像文件时,我就是不能这样做。
我甚至通过以二进制模式"rb"
打开图像文件来尝试这个。
这是我正在使用的代码:
#include "file.h"
#include "stdio.h"
main()
{
FILE *fp;
char ch;
fp = fopen("D:\\setups\\tcc\\Bluehills.bmp", "rb+");
if(fp == NULL)
{
printf("Error in opening the image");
fclose(fp);
exit(0);
}
printf("Successfully opened the image file");
while((ch = fgetc(fp)) != EOF)
{
printf("%c", ch);
}
printf("\nWriting to o/p completed");
}
我需要修改什么来获取图像?当我将图像输出定向到DOS窗口时,必须至少出现单色像素图像。
答案 0 :(得分:4)
Opencv社区提供了一些例程来加载图像,访问图像的值。实际上,在大多数opencv教程文档中,我们都会找到许多函数的C版本。您可以查看此链接C_Api functions。
但是,有一个免责声明:与C ++ / python例程相比,opencv的C例程更少。但如果你别无选择,他们总会在那里徘徊。
此外,互联网社区认为使用C(Opencv例程)目的是一种过时的方法,原因有两个:
C ++的Mat
个对象与C的IplImage/cvMat
个对象之间没有兼容性。
包含stdio.h, highgui.h, cv.h
库后的一些示例代码(模糊):
`int main(int argc,char ** argv){
IplImage* img = 0;
IplImage* out = 0;
if( argc < 2 ) {
printf( "Usage: Accepts one image as argument\n" );
exit( EXIT_SUCCESS );
}
img = cvLoadImage( argv[1] );
if( !img ) {
printf( "Error loading image file %s\n", argv[1]);
exit( EXIT_SUCCESS );
}
out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
cvSmooth( img, out, CV_GAUSSIAN, 3, 3 );
cvReleaseImage( &img );
cvReleaseImage( &out );
cvDestroyWindow( "Example1" );
cvDestroyWindow( "Output" );
return EXIT_SUCCESS;
}`
答案 1 :(得分:2)
在C中打开文件通常是(offtopic:总是如何?:)使用 fopen()完成。
现在,当涉及到阅读并假设您正在谈论二进制文件格式(例如大多数图像文件格式的情况)时,您必须先进行一些研究才能正确读取数据。如果您告诉我们您正在尝试阅读哪种文件类型,或许您将获得更详细的信息。
答案 2 :(得分:2)
正如其他人所提到的,由于图像是二进制文件,因此您必须知道如何在读取它们之后“解释”它们中的数据。幸运的是,对于大多数格式,您可以找到为您执行此操作的库,如libpng或libjpeg。
答案 3 :(得分:1)
这实际上取决于扩展 - BMP与TIFF完全不同,或者无论如何......
您可以获取图像中的每个像素并存储它。使用setpixel()和getpixel(),您可以存储来自worldview的像素,并将它们dmap到视口...
答案 4 :(得分:0)
答案 5 :(得分:0)
我认为问题在于读取文件,bcoz u r以二进制(位)方向打开文件并以字节方向读取。 所以我认为问题在于“fgetc” 而是尝试“fread”