c语言读取bmp图像_opencv 图像处理

c语言读取bmp图像_opencv 图像处理以前都是使C语言中File*、fopen、fread等操作文件,这几天学习了C++IO标准库,就应用来读取bmp图像。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

以前都是使C语言中File* 、fopen、fread等操作文件,这几天学习了C++ IO标准库,就应用来读取bmp图像。

#include "stdafx.h"
#include <fstream>
# include <windows.h>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
	BITMAPFILEHEADER fh;
	BITMAPINFOHEADER ih;
	int rows, cols;
	Mat showImg;

	ifstream src("2.bmp", ifstream::binary); //2.bmp为灰度图像
	if (!src)
	{
		cerr << "打开失败";
		return -1;
	}
	src.read((char *)&fh, sizeof(BITMAPFILEHEADER));
	if (fh.bfType != 'MB')
	{
		cerr << "这不是BMP图像";
		return -1;
	}
	src.read((char *)&ih, sizeof(BITMAPINFOHEADER));
	rows = ih.biHeight;
	cols = ih.biWidth;
	//bmp图像数据存储是4字节对齐的
	int colsDQ = (cols + 3) / 4 * 4;
	//移动到图像数据处
	src.seekg(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD) * 256, ios::beg);//参数:相对位置,起点
	showImg = Mat::zeros(rows, cols, CV_8U);
	//读取图像数据
	uchar *pData = new uchar[rows*colsDQ];
	src.read((char *)pData, rows*colsDQ);
	//bmp图像数据转换到Mat图像数据(Mat图像数据非对齐)
	for (int i = rows - 1; i >= 0; --i) //bmp图像存储为行倒序
		for (int j = 0; j < cols; ++j)
		{
			showImg.ptr<uchar>(rows - 1 - i)[j] = *(pData + i*colsDQ + j);
		}
	delete[]pData;
	imshow("hi", showImg);

	waitKey();
	return 0;
}

参考:

1、点击打开链接

2、点击打开链接 写bmp图像

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191934.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LLDP技术原理

    LLDP技术原理概念:LLDP(LinkLayerDiscoveryProtocol,链路层发现协议)提供了一种标准的链路层发现方式,可以将本端设备的的主要能力、管理地址、设备标识、接口标识等信息组织成不同的TLV(Type/Length/Value),并封装在LLDPDU(LinkLayerDiscoveryProtocolDataUnit,链路层发现协议数据单元)中发布给与自己直连的邻居,邻居收到这些信息后将其以标准MIB(ManagementInformationBase,管理信息库)的形式保存

    2022年5月8日
    46
  • JMH简介

    JMH简介  JMH是新的microbenchmark(微基准测试)框架(2013年首次发布)。与其他众多框架相比它的特色优势在于,它是由Oracle实现JIT的相同人员开发的。特别是我想提一下AlekseyShipilev和他优秀的博客文章。JMH可能与最新的OracleJRE同步,其结果可信度很高。JMH的示例链接。使用JMH仅需满足2个必要条件(其他所有都是建议选项):设置jmh-…

    2022年7月11日
    29
  • UVA644

    UVA644题意:输入多个序列,判断是否存在前缀关系。思路如下:现

    2022年6月16日
    30
  • 医学图形图像处理(医学影像和医学图像处理)

    文章目录1图像和数字图像1图像和数字图像  数字图像:被定义为一个二维函数,f(x,y),其中x,y代表空间坐标,f代表点(x,y)处的强度或灰度级。和普通的笛卡尔坐标系有区别,在计算机中坐标系左上角为原点:  图像数字化:图像进入计算机后,对图像进行数字化(映射)。数字图像三要素:  (1)像素:大小决定了图像存储、显示的清晰度;  (2)灰度值:通常为0-255,因为在计算机中通常用一个字节来表示一个像素,即28。  (3)坐标  图像存储在计算机中会丢失信息,因为是从一个连续的

    2022年4月15日
    56
  • 给定一个n个正整数组成的数组_求数组最小差值最优算法

    给定一个n个正整数组成的数组_求数组最小差值最优算法给定长度为 N 的数列 A,然后输入 M 行操作指令。第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。第二类指令形如 Q x,表示询问数列中第 x 个数的值。对于每个询问,输出一个整数表示答案。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,|d|≤10000,|A[i]|≤109输

    2022年8月10日
    20
  • Nmap 命令[通俗易懂]

    Nmap 命令[通俗易懂]Nmap命令探测主机信息一、扫描指定IP所开放的端口输入命令:nmap-sS-p-1-65535-v192.168.1.106表示用半开扫描,扫描指定端口为1到65535,并且显示扫描过程Nmap常用扫描参数及说明参数 说明-sT TCPconnect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息-sS 半开扫描,很少有系统能够把它记入系统日志。不过,需要root权限-sF-sN 秘密FIN数据包扫描,XmasTree、Null扫描模式-sP pin

    2022年5月28日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号