libjpeg实践1:源码编译和MJPG转BMP测试:

news2024/11/25 6:49:01

编译源码

下载源码

http://www.ijg.org/files/

wget http://www.ijg.org/files/jpegsrc.v9b.tar.gz

解压:

tar zxvf jpegsrc.v9b.tar.gz 

开始配置和编译,因为是在ubuntu中测试。所以配置很简单

./configure --prefix=/home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install_ubuntu/

然后是make和make install

执行make install时,由一条警告:

 难道是让执行这条命令:本着听人劝吃饱饭的原则,执行建议的这条命令:libtool --finish /home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install/lib

$ libtool --finish /home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install/lib

Command 'libtool' not found, but can be installed with:

sudo apt install libtool-bin

需要安装sudo apt install libtool-bin

 再次执行:看执行结果,好像很厉害的样子,反正就是要搞好LD_LIBRARY_PATHLD_RUN_PATH环境变量的意思吧。

$ libtool --finish /home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install/lib
libtool: finish: PATH=" /home/lkmao/linux/3588-linux/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:/home/lkmao/linux/3588-linux/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin:/home/lkmao/miniconda3/bin:/home/lkmao/miniconda3/condabin:/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/sbin" ldconfig -n /home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

安装后的目录树,如下所示。还是挺清新的。

使用编译后的文件

1 直接复制文件到系统目录

进入到 libjpeg 安装目录下,将 bin 目录下的所有测试工具拷贝到ubuntu   系统 /usr/bin 目录;将 lib 目录下的所有库文件拷贝到ubuntu系统/usr/lib 目录。 拷贝 lib 目录下的库文件时,需要注意符号链接的问题,不能破坏原有的符号链接;可以将 lib 目录下 的所有文件打包成压缩包的形式,譬如进入到 lib 目录,执行命令:

2 设置环境变量(推荐方式)

export PATH=/home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install_ubuntu/bin:$PATH
export LD_LIBRARY_PATH=/home/lkmao/linux/3588-linux/app/tools/jpeg-9b/_install_ubuntu/lib:$LD_LIBRARY_PATH

mjpg转bmp代码

下面是一个将mjpg图片转换成bmp图片的测试代码:


#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>
#include <sys/mman.h>
#include <string.h>
#include <stdint.h>
#include <jpeglib.h>

#define _DEBUG_INFO
#ifdef _DEBUG_INFO
#define DEBUG_INFO(format, ...) printf("%s:%d -- "format"\n" \
,__func__,__LINE__ \
, ##__VA_ARGS__)
#else
#define DEBUG_INFO(format, ...)
#endif


typedef uint16_t WORD;
typedef uint32_t DWORD;
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER{
    WORD bfType;//2
    DWORD bfSize;//4
    WORD bfReserved1;//2
    WORD bfReserved2;//2
    DWORD bfOffBits;//4
} BITMAPFILEHEADER;
#pragma pack()
typedef uint32_t LONG; 
#pragma pack(1)
typedef struct tagBITMAPINFOHEADER{
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
} BITMAPINFOHEADER; 
 
static char color_board[] = {
0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x02,0x02,0x02,0x00,0x03,0x03,0x03,0x00,
0x04,0x04,0x04,0x00,0x05,0x05,0x05,0x00,0x06,0x06,0x06,0x00,0x07,0x07,0x07,0x00,
0x08,0x08,0x08,0x00,0x09,0x09,0x09,0x00,0x0a,0x0a,0x0a,0x00,0x0b,0x0b,0x0b,0x00,
0x0c,0x0c,0x0c,0x00,0x0d,0x0d,0x0d,0x00,0x0e,0x0e,0x0e,0x00,0x0f,0x0f,0x0f,0x00,
0x10,0x10,0x10,0x00,0x11,0x11,0x11,0x00,0x12,0x12,0x12,0x00,0x13,0x13,0x13,0x00,
0x14,0x14,0x14,0x00,0x15,0x15,0x15,0x00,0x16,0x16,0x16,0x00,0x17,0x17,0x17,0x00,
0x18,0x18,0x18,0x00,0x19,0x19,0x19,0x00,0x1a,0x1a,0x1a,0x00,0x1b,0x1b,0x1b,0x00,
0x1c,0x1c,0x1c,0x00,0x1d,0x1d,0x1d,0x00,0x1e,0x1e,0x1e,0x00,0x1f,0x1f,0x1f,0x00,
0x20,0x20,0x20,0x00,0x21,0x21,0x21,0x00,0x22,0x22,0x22,0x00,0x23,0x23,0x23,0x00,
0x24,0x24,0x24,0x00,0x25,0x25,0x25,0x00,0x26,0x26,0x26,0x00,0x27,0x27,0x27,0x00,
0x28,0x28,0x28,0x00,0x29,0x29,0x29,0x00,0x2a,0x2a,0x2a,0x00,0x2b,0x2b,0x2b,0x00,
0x2c,0x2c,0x2c,0x00,0x2d,0x2d,0x2d,0x00,0x2e,0x2e,0x2e,0x00,0x2f,0x2f,0x2f,0x00,
0x30,0x30,0x30,0x00,0x31,0x31,0x31,0x00,0x32,0x32,0x32,0x00,0x33,0x33,0x33,0x00,
0x34,0x34,0x34,0x00,0x35,0x35,0x35,0x00,0x36,0x36,0x36,0x00,0x37,0x37,0x37,0x00,
0x38,0x38,0x38,0x00,0x39,0x39,0x39,0x00,0x3a,0x3a,0x3a,0x00,0x3b,0x3b,0x3b,0x00,
0x3c,0x3c,0x3c,0x00,0x3d,0x3d,0x3d,0x00,0x3e,0x3e,0x3e,0x00,0x3f,0x3f,0x3f,0x00,
0x40,0x40,0x40,0x00,0x41,0x41,0x41,0x00,0x42,0x42,0x42,0x00,0x43,0x43,0x43,0x00,
0x44,0x44,0x44,0x00,0x45,0x45,0x45,0x00,0x46,0x46,0x46,0x00,0x47,0x47,0x47,0x00,
0x48,0x48,0x48,0x00,0x49,0x49,0x49,0x00,0x4a,0x4a,0x4a,0x00,0x4b,0x4b,0x4b,0x00,
0x4c,0x4c,0x4c,0x00,0x4d,0x4d,0x4d,0x00,0x4e,0x4e,0x4e,0x00,0x4f,0x4f,0x4f,0x00,
0x50,0x50,0x50,0x00,0x51,0x51,0x51,0x00,0x52,0x52,0x52,0x00,0x53,0x53,0x53,0x00,
0x54,0x54,0x54,0x00,0x55,0x55,0x55,0x00,0x56,0x56,0x56,0x00,0x57,0x57,0x57,0x00,
0x58,0x58,0x58,0x00,0x59,0x59,0x59,0x00,0x5a,0x5a,0x5a,0x00,0x5b,0x5b,0x5b,0x00,
0x5c,0x5c,0x5c,0x00,0x5d,0x5d,0x5d,0x00,0x5e,0x5e,0x5e,0x00,0x5f,0x5f,0x5f,0x00,
0x60,0x60,0x60,0x00,0x61,0x61,0x61,0x00,0x62,0x62,0x62,0x00,0x63,0x63,0x63,0x00,
0x64,0x64,0x64,0x00,0x65,0x65,0x65,0x00,0x66,0x66,0x66,0x00,0x67,0x67,0x67,0x00,
0x68,0x68,0x68,0x00,0x69,0x69,0x69,0x00,0x6a,0x6a,0x6a,0x00,0x6b,0x6b,0x6b,0x00,
0x6c,0x6c,0x6c,0x00,0x6d,0x6d,0x6d,0x00,0x6e,0x6e,0x6e,0x00,0x6f,0x6f,0x6f,0x00,
0x70,0x70,0x70,0x00,0x71,0x71,0x71,0x00,0x72,0x72,0x72,0x00,0x73,0x73,0x73,0x00,
0x74,0x74,0x74,0x00,0x75,0x75,0x75,0x00,0x76,0x76,0x76,0x00,0x77,0x77,0x77,0x00,
0x78,0x78,0x78,0x00,0x79,0x79,0x79,0x00,0x7a,0x7a,0x7a,0x00,0x7b,0x7b,0x7b,0x00,
0x7c,0x7c,0x7c,0x00,0x7d,0x7d,0x7d,0x00,0x7e,0x7e,0x7e,0x00,0x7f,0x7f,0x7f,0x00,
0x80,0x80,0x80,0x00,0x81,0x81,0x81,0x00,0x82,0x82,0x82,0x00,0x83,0x83,0x83,0x00,
0x84,0x84,0x84,0x00,0x85,0x85,0x85,0x00,0x86,0x86,0x86,0x00,0x87,0x87,0x87,0x00,
0x88,0x88,0x88,0x00,0x89,0x89,0x89,0x00,0x8a,0x8a,0x8a,0x00,0x8b,0x8b,0x8b,0x00,
0x8c,0x8c,0x8c,0x00,0x8d,0x8d,0x8d,0x00,0x8e,0x8e,0x8e,0x00,0x8f,0x8f,0x8f,0x00,
0x90,0x90,0x90,0x00,0x91,0x91,0x91,0x00,0x92,0x92,0x92,0x00,0x93,0x93,0x93,0x00,
0x94,0x94,0x94,0x00,0x95,0x95,0x95,0x00,0x96,0x96,0x96,0x00,0x97,0x97,0x97,0x00,
0x98,0x98,0x98,0x00,0x99,0x99,0x99,0x00,0x9a,0x9a,0x9a,0x00,0x9b,0x9b,0x9b,0x00,
0x9c,0x9c,0x9c,0x00,0x9d,0x9d,0x9d,0x00,0x9e,0x9e,0x9e,0x00,0x9f,0x9f,0x9f,0x00,
0xa0,0xa0,0xa0,0x00,0xa1,0xa1,0xa1,0x00,0xa2,0xa2,0xa2,0x00,0xa3,0xa3,0xa3,0x00,
0xa4,0xa4,0xa4,0x00,0xa5,0xa5,0xa5,0x00,0xa6,0xa6,0xa6,0x00,0xa7,0xa7,0xa7,0x00,
0xa8,0xa8,0xa8,0x00,0xa9,0xa9,0xa9,0x00,0xaa,0xaa,0xaa,0x00,0xab,0xab,0xab,0x00,
0xac,0xac,0xac,0x00,0xad,0xad,0xad,0x00,0xae,0xae,0xae,0x00,0xaf,0xaf,0xaf,0x00,
0xb0,0xb0,0xb0,0x00,0xb1,0xb1,0xb1,0x00,0xb2,0xb2,0xb2,0x00,0xb3,0xb3,0xb3,0x00,
0xb4,0xb4,0xb4,0x00,0xb5,0xb5,0xb5,0x00,0xb6,0xb6,0xb6,0x00,0xb7,0xb7,0xb7,0x00,
0xb8,0xb8,0xb8,0x00,0xb9,0xb9,0xb9,0x00,0xba,0xba,0xba,0x00,0xbb,0xbb,0xbb,0x00,
0xbc,0xbc,0xbc,0x00,0xbd,0xbd,0xbd,0x00,0xbe,0xbe,0xbe,0x00,0xbf,0xbf,0xbf,0x00,
0xc0,0xc0,0xc0,0x00,0xc1,0xc1,0xc1,0x00,0xc2,0xc2,0xc2,0x00,0xc3,0xc3,0xc3,0x00,
0xc4,0xc4,0xc4,0x00,0xc5,0xc5,0xc5,0x00,0xc6,0xc6,0xc6,0x00,0xc7,0xc7,0xc7,0x00,
0xc8,0xc8,0xc8,0x00,0xc9,0xc9,0xc9,0x00,0xca,0xca,0xca,0x00,0xcb,0xcb,0xcb,0x00,
0xcc,0xcc,0xcc,0x00,0xcd,0xcd,0xcd,0x00,0xce,0xce,0xce,0x00,0xcf,0xcf,0xcf,0x00,
0xd0,0xd0,0xd0,0x00,0xd1,0xd1,0xd1,0x00,0xd2,0xd2,0xd2,0x00,0xd3,0xd3,0xd3,0x00,
0xd4,0xd4,0xd4,0x00,0xd5,0xd5,0xd5,0x00,0xd6,0xd6,0xd6,0x00,0xd7,0xd7,0xd7,0x00,
0xd8,0xd8,0xd8,0x00,0xd9,0xd9,0xd9,0x00,0xda,0xda,0xda,0x00,0xdb,0xdb,0xdb,0x00,
0xdc,0xdc,0xdc,0x00,0xdd,0xdd,0xdd,0x00,0xde,0xde,0xde,0x00,0xdf,0xdf,0xdf,0x00,
0xe0,0xe0,0xe0,0x00,0xe1,0xe1,0xe1,0x00,0xe2,0xe2,0xe2,0x00,0xe3,0xe3,0xe3,0x00,
0xe4,0xe4,0xe4,0x00,0xe5,0xe5,0xe5,0x00,0xe6,0xe6,0xe6,0x00,0xe7,0xe7,0xe7,0x00,
0xe8,0xe8,0xe8,0x00,0xe9,0xe9,0xe9,0x00,0xea,0xea,0xea,0x00,0xeb,0xeb,0xeb,0x00,
0xec,0xec,0xec,0x00,0xed,0xed,0xed,0x00,0xee,0xee,0xee,0x00,0xef,0xef,0xef,0x00,
0xf0,0xf0,0xf0,0x00,0xf1,0xf1,0xf1,0x00,0xf2,0xf2,0xf2,0x00,0xf3,0xf3,0xf3,0x00,
0xf4,0xf4,0xf4,0x00,0xf5,0xf5,0xf5,0x00,0xf6,0xf6,0xf6,0x00,0xf7,0xf7,0xf7,0x00,
0xf8,0xf8,0xf8,0x00,0xf9,0xf9,0xf9,0x00,0xfa,0xfa,0xfa,0x00,0xfb,0xfb,0xfb,0x00,
0xfc,0xfc,0xfc,0x00,0xfd,0xfd,0xfd,0x00,0xfe,0xfe,0xfe,0x00,0xff,0xff,0xff,0x00,
};
#pragma pack()
//本函数不支持调色板
int write_bmp(char*name,char *buf,int width,int height)
{
	int fd = 0;
	BITMAPFILEHEADER bit_map_file_header;
	BITMAPINFOHEADER bit_map_info_header;
    //char name[20];
    //snprintf(name,sizeof(name),"%d.bmp",index);
	fd = open(name,O_RDWR | O_CREAT | O_TRUNC,0666);
	if(fd < 0){
		perror("open");
		return -1;
	}
	printf("%ld,%ld\n",sizeof(BITMAPFILEHEADER),sizeof(BITMAPINFOHEADER));
	printf("open %s ok\n",name);
	memset(&bit_map_file_header,0,sizeof(BITMAPFILEHEADER));
	memset(&bit_map_info_header,0,sizeof(BITMAPINFOHEADER));
	bit_map_file_header.bfType = 0x4D42;
	bit_map_file_header.bfSize = width*height + 54 + 1024;
	bit_map_file_header.bfOffBits = 54 + 1024;//就是位图数据之前的文件头长度,包括调色板。
	
	write(fd,&bit_map_file_header,sizeof(BITMAPFILEHEADER));
	
	bit_map_info_header.biSize = 40;
	bit_map_info_header.biWidth = width;
	bit_map_info_header.biHeight = height;
	bit_map_info_header.biPlanes = 1;
	bit_map_info_header.biBitCount = 8;
	bit_map_info_header.biCompression = 0;// //压缩方式,可以是0,1,2,其中0表示不压缩
	bit_map_info_header.biSizeImage = width*height;
	bit_map_info_header.biXPelsPerMeter = 0;
	bit_map_info_header.biYPelsPerMeter = 0;
	bit_map_info_header.biClrUsed = 256;
	bit_map_info_header.biClrImportant = 256;
	write(fd,&bit_map_info_header,sizeof(BITMAPINFOHEADER));
	write(fd,color_board,1024);
    //write(fd,buf,width*height);
    int max_bytes = width*height;
    while(max_bytes > 0){
        max_bytes -= width;
        write(fd,&buf[max_bytes],width);
    }
	close(fd);
	return 0;
}

//Gray = 0.30 * R + 0.59 * G + 0.11 * B
uint8_t rgb888_to_gray(uint8_t r,uint8_t g,uint8_t b){
    return (uint8_t)(0.3 *(float)r + 0.59 * (float)g + 0.11 * (float)b);
}

int main(int argc, char **argv)
{
    char *filename = "0.mjpg";
    struct jpeg_decompress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE *infile = NULL;
    unsigned char *buffer = NULL;

    

    infile = fopen(filename,"rb");
    if(infile == NULL){
        perror("fopen:");
        return -1;
    }

    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_decompress(&cinfo);

    jpeg_stdio_src(&cinfo,infile);
    
    jpeg_read_header(&cinfo,TRUE);
    DEBUG_INFO("image_width = %d,image_height = %d,output_components=%d",
    cinfo.image_width,
    cinfo.image_height,
    cinfo.output_components);

    jpeg_start_decompress(&cinfo);
    DEBUG_INFO("image_width = %d,image_height = %d,output_components=%d,output_height = %d,output_scanline = %d",
        cinfo.image_width,
        cinfo.image_height,
        cinfo.output_components,
        cinfo.output_height,
        cinfo.output_scanline);
    buffer = (unsigned char *)malloc(cinfo.image_width*cinfo.output_components);
    if(buffer == NULL){
        DEBUG_INFO("malloc error");
        goto END;
    }

    
    unsigned char *bmp_buf = (unsigned char*)malloc(cinfo.image_width * cinfo.image_height);
    int bmp_index = 0;
    int i = 0;
    while (cinfo.output_scanline < cinfo.output_height) {
        jpeg_read_scanlines(&cinfo,&buffer,1);
        for(i = 0;i < cinfo.output_width;i++){
            bmp_buf[bmp_index] = rgb888_to_gray(buffer[i*3 + 0],
            buffer[i*3 + 1],buffer[i*3 + 2]);
            bmp_index++;
        }
    }
END:
    write_bmp("new.bmp",bmp_buf,cinfo.output_width,cinfo.output_height);
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    free(bmp_buf);
    free(buffer);

    fclose(infile);
    return 0;
}

测试结果:

左边是转换前,右边是转换后,看起来还不错 

 小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 2.7 集成 Netty 4 解决粘包半包问题

文章目录 1 摘要2 核心代码2.1 Netty 服务端连接器2.2 Netty 客户端连接器2.3 Netty 服务端 Handler2.4 Netty 客户端 Handler 3 推荐参考资料4 Github 源码 1 摘要 Netty 的粘包和半包问题是由于 Netty 在接收消息时无法判断消息是否发送完毕&#xff0c;只能靠读取消息时是否…

每天一分享#读up有感#

不知道开头怎么写&#xff0c;想了一下&#xff0c;要不&#xff0c;就这样吧&#xff0c;开头也就写完 今日分享 分享一博主的分享——https://blog.csdn.net/zhangay1998/article/details/121736687 全程高能&#xff0c;大佬就diao&#xff0c;一鸣惊人、才能卓越、名扬四…

算法通关村十二关 | 字符串前缀问题

1. 最长公共前缀 题目&#xff1a;LeetCode14&#xff0c;14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 思路一 我们先看公共前缀有什么特点。 第一种方式&#xff0c;竖着比较&#xff0c;如图左边所示&#xff0c;选取数组中第一个字符串的位置&#xff0c;每…

platform相关资料

Step 1: Hardware Settings for Vitis Platform — Vitis™ Tutorials 2021.2 documentationhttps://xilinx.github.io/Vitis-Tutorials/2021-2/build/html/docs/Vitis_Platform_Creation/Introduction/03_Edge_VCK190/step1.html https://www.cnblogs.com/VagueCheung/p/1313…

Tensoeboard的一些坑与技巧

安装 pip install tensorboard 安装过程中遇到tensoeboard.exe找不到&#xff0c;参考解决&#xff1a; https://blog.csdn.net/weixin_44532467/article/details/123525891 3.启动tensorboard 默认路径 &#xff08;&#xff09; tensorboard --logdir logstensorboard -…

淘宝API技术解析,实现获得淘宝APP商品详情原数据

淘宝API&#xff08;Application Programming Interface&#xff09;是为开发者提供的一组接口&#xff0c;用于与淘宝平台进行数据交互。通过使用淘宝API&#xff0c;开发者可以获得淘宝平台上商品、店铺、订单等各种数据&#xff0c;并进行相应的业务操作。 要实现获取淘宝A…

利用Kettle进行SQLServer与Oracle之间的数据迁移实践

待更新 https://it.cha138.com/tech/show-1275283.html

基于spring boot校园疫情信息管理系统/疫情管理系统

摘要 随着计算机技术&#xff0c;网络技术的迅猛发展&#xff0c;Internet 的不断普及&#xff0c;网络在各个领域里发挥了越来越重要的作用。特别是随着近年人民生活水平不断提高&#xff0c;校园疫情信息管理系统给学校带来了更大的帮助。 由于当前疫情防控形势复杂&#xff…

史上最全软件测试入门到精通【测试+测开】

测试学习大纲梳理 根据本人过往学习经验与理解&#xff0c;整理了一些关于测试学习内容与顺序&#xff0c;涵盖了基本软件测试工程师需要掌握的所有技能&#xff0c;希望可以给想了解的小伙伴们一些指引与帮助&#xff0c;有错误或需求的欢迎留言指出~ 一、web开发者模式 这…

[LeetCode周赛复盘] 第 359 场周赛20230820

[LeetCode周赛复盘] 第 359 场周赛20230820 一、本周周赛总结2828. 判别首字母缩略词1. 题目描述2. 思路分析3. 代码实现 2829. k-avoiding 数组的最小总和1. 题目描述2. 思路分析3. 代码实现 2830. 销售利润最大化1. 题目描述2. 思路分析3. 代码实现 2831. 找出最长等值子数组…

【智算中心】国产GPU横向对比

近日&#xff0c;沐曦发布了一篇名为《沐曦与智谱AI完成兼容性测试 共建软硬件一体化解决方案》的公众号&#xff0c;表示曦云C500千亿参数AI大模型训练及通用计算GPU与智谱AI开源的中英双语对话语言模型ChatGLM2-6B完成适配。测试结果显示&#xff0c;曦云C500在智谱AI的升级版…

V4L2+单色USB摄像头编程实践3:读取MJPG格式图像

查看摄像头支持的MJPG格式的分辨率和帧率&#xff1a; $ v4l2-ctl --list-formats-ext --device /dev/video0 ioctl: VIDIOC_ENUM_FMTType: Video Capture[0]: MJPG (Motion-JPEG, compressed)Size: Discrete 1280x720 Interval: Discrete 0.008s (120.000 fps)Interval:…

敏捷研发管理软件及敏捷管理流程

Scrum中非常强调公开、透明、直接有效的沟通&#xff0c;这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求&#xff0c;故事&#xff0c;任务之间的流转状态&#xff0c;可以使团队成员更加快速适应敏捷开发流程。 …

Java cc链2 分析

环境 cc4 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 --> <dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.0</version&…

损失函数介绍

用softmax&#xff0c;就可以将一个输出值转换到概率取值的一个范围。 交叉熵损失CrossEntropyLoss 第一个参数weight&#xff0c; 各类别的loss设置权值&#xff0c; 如果类别不均衡的时候这个参数很有必要了&#xff0c;加了之后损失函数变成这样&#xff1a; 第二个参数ign…

8年测试经验之谈 —— 什么是全链路压测?

随着互联网技术的发展和普及&#xff0c;越来越多的互联网公司开始重视性能压测&#xff0c;并将其纳入软件开发和测试的流程中。 阿里巴巴在2014 年双11 大促活动保障背景下提出了全链路压测技术&#xff0c;能更好的保障系统可用性和稳定性。 什么是全链路压测&#xff1f; …

湘潭大学 湘大 XTU 1251 Colombian Number 题解(非常详细)

参考文章 1.XTUOJ-1251-Colombian Number 链接 1251 题面 题目描述 对于正整数n,不存在整数k,使得n等于k加上k的数码累加和&#xff0c;我们称这样的数是哥伦比亚数或者自我数。 比如 11就不是一个哥伦比亚数&#xff0c;因为10加上10的数码累加和1等于11;而20则是一个哥伦…

uniapp 开发微信小程序使用echart的dataZoom属性缩放功能不生效!bug记录!

在本项目中使用的是这个echart库 在项目中添加了dataZoom配置项但是不生效&#xff0c;突然想到微信小程序代码大小的限制&#xff0c;之前的echarts.js是定制的&#xff0c;有可能没有加dataZoom组件。故重新定制echarts.js。之前用的echarts版本是5.0.0&#xff0c;这次也是…

容灾设备系统组成,容灾备份系统组成包括哪些

随着信息技术的快速发展&#xff0c;企业对数据的需求越来越大&#xff0c;数据已经成为企业的核心财产。但是&#xff0c;数据安全性和完整性面临巨大挑战。在这种环境下&#xff0c;容灾备份系统应运而生&#xff0c;成为保证企业数据安全的关键因素。下面我们就详细介绍容灾…

IDEA启动Tomcat两个端口的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…