由YUV转换成RGB后,得到了首地址pOut,和长度length,请问怎么在OPENCV 中显示呢? 30C

由YUV转换成RGB后,得到了数据的首地址pOut,和长度length,请问怎么在OPENCV 中显示出图片呢?

3个回答

楼主提问是否应该写出你使用什么技术,什么语言来实现的呢?

c++,opencv 就可以。要是有代码就好了

可以通过jni传到本地处理,我有篇文章就是介绍,如何用opencv读取图片数据缓存的,希望对你有帮助。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android如何直接将解码出来的yuv显示
android如何直接将解码出来的yuv显示,目前我在项目中是将yuv转换成rgb565来显示,效率太低了。。。希望高手能给一个可行的方案。。。。
yuv到rgb视频格式转换
#define asm __asm typedef unsigned char TUInt8; // [0..255] typedef unsigned long TUInt32; struct TARGB32 // 32 bit color { TUInt8 b,g,r,a; // a is alpha }; struct TPicRegion // 一块颜色数据区的描述,便于参数传递 { TARGB32 * pdata; // 颜色数据首地址 long byte_width; // 一行数据的物理宽度(字节宽度); // abs(byte_width)有可能大于等于width*sizeof(TARGB32); long width; // 像素宽度 long height; // 像素高度 }; // 那么访问一个点的函数可以写为: __forceinline TARGB32 & Pixels( const TPicRegion & pic, const long x, const long y) { return ( (TARGB32 * )((TUInt8 * )pic.pdata + pic.byte_width * y) )[x]; } // 颜色饱和函数 __forceinline long border_color( long color) { if (color > 255 ) return 255 ; else if (color < 0 ) return 0 ; else return color; } __forceinline TARGB32 YUVToRGB32_float( const TUInt8 Y, const TUInt8 U, const TUInt8 V) { TARGB32 result; result.b= border_color( 1.164383 * (Y - 16) + 2.017232*(U - 128) ); result.g= border_color( 1.164383 * (Y - 16) - 0.391762*(U - 128) - 0.812968*(V - 128) ); result.r= border_color( 1.164383 * (Y - 16) + 1.596027*(V - 128) ); result.a = 255 ; return result; } void DECODE_YUYV_Float( const TUInt8 * pYUYV, const TPicRegion & DstPic) { assert((DstPic.width & 1 ) == 0 ); TARGB32 * pDstLine = DstPic.pdata; for ( long y = 0 ;y < DstPic.height; ++ y) { for ( long x = 0 ;x < DstPic.width;x += 2 ) { pDstLine[x + 0 ] = YUVToRGB32_float(pYUYV[ 0 ],pYUYV[ 1 ],pYUYV[ 3 ]); pDstLine[x + 1 ] = YUVToRGB32_float(pYUYV[ 2 ],pYUYV[ 1 ],pYUYV[ 3 ]); pYUYV += 4 ; } ((TUInt8 *& )pDstLine) += DstPic.byte_width; } } 哪位大神帮忙写个 main()函数 让我看看具体输出是啥样的
opencv cvcvtcolor函数 将RGB转为YUV
![YUV](https://img-ask.csdn.net/upload/201504/13/1428924331_530409.png) ![RGB](https://img-ask.csdn.net/upload/201504/13/1428924318_594405.png) 转换后图片怎么变成这样了
海康摄像头SDK实现YUV到RGB的转换实现基于OpenCV的实现
海康SDK的回调格式是YUV 我需要OpenCV转到RGB可用于解析二维码
关于RGB,YUV互换,颜色失真的问题
我想要实现的功能是将RGB转为YUV,YUV输出的大小要为8位整数,我通过下面图片的代码进行转换然后还原,发现图像有失真,不知什么原因呢??求大神指点 ![图片说明](https://img-ask.csdn.net/upload/201503/21/1426930463_889285.jpg)
怎样用c语言把jpeg转换成rgb24
在做视频采集和压缩,哪位大神帮帮忙,把jpeg直接转成yuv的也行
如何转换 yuv420sp的 byte[]数据成opencv 的Mat类型?
如何转换 yuv420sp的 byte[]数据成opencv 的Mat类型? 在android相机中获取数据,想直接转换成mat类型,使用的opencv-android
【求助】YUV格式转RGB
R=Y+1.140V G=Y-0.395U-V B=Y+2.032U Y取值[16,235],UV取值[16,240] 照这个取值那么计算出来的RGB范围不就>255了么? 我认为的解决方案: 1:大于255按255计 2:归一化 请问有哪位知道怎么处理丫,求救 ![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/15.gif)
YUV444,YUV422,YUV420中的4,2,0代表什么意思?
如题!网上看了几篇文章,还是没清楚YUV格式,还有后面带的数字难道没有意义吗,请这方面的大神解释解释.
怎么把YUV422转bitmap,java
跪求YUV422转bitmap的java代码,网上百度了一些好像不顶用。
安卓手机实时视频传输
我要写一篇论文,不知道思路对不对,麻烦各位牛人给看看。 我是要做一个APP,我的思路是通过安卓自带摄像头采集视频并预览,回调函数获取实时视频帧数据,通过wifi环境下的Socket UDP传输采集到的原始YUV420sp数据到另一台手机上去,另一台手机上将获得的YUV420sp数据转换成RGB格式的,然后用SurfaceView控件显示出来。 就整个思路有没有逻辑问题?有没有技术难题?比如,YUV能通过socket传输吗?YUV转RGB后,SurfaceView能显示出来吗? 这对我很重要。希望大家给个答案。谢谢了。跪谢。
rgb转byte数组应该怎么处理
我在看YUV420SP转RGB的时候有如下一段java代码 if (r < 0) r = 0; else if (r > 262143) r = 262143; if (g < 0) g = 0; else if (g > 262143) g = 262143; if (b < 0) b = 0; else if (b > 262143) b = 262143; rgbBuf[yp * 3] = (byte)(r >> 10); rgbBuf[yp * 3 + 1] = (byte)(g >> 10); rgbBuf[yp * 3 + 2] = (byte)(b >> 10); 将rgb存放到一个byte[]数组中,但是这样转换的颜色有问题,人物是蓝色的,我从别的地方也看到相关颜色转换算法 int rgbTmp = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff); 第二种转换换后的是int型数据,但是我需要的是3个自己的byte数组,而且好像转换算法也不同,不知道那种是正确的
ffmpeg硬解码rtsp流后,得到的yuv格式视频画面晃动
**我通过参考ffmpeg官方示例[hw_decode.c](http://www.ffmpeg.org/doxygen/trunk/hw_decode_8c-example.html "hw_decode.c"),来对rtsp流进行硬解码。 将解码完成后的yuv格式视频用yuvPlayer软件打开,看到视频画面是不停地左右晃动的,请问应该如何解决啊?** ![图片说明](https://img-ask.csdn.net/upload/201909/10/1568077313_346437.png) ![图片说明](https://img-ask.csdn.net/upload/201909/10/1568077332_186806.png) **在解码的过程中和调用avformat_find_stream_info()函数的时候,控制台不停地输出消息“PES packet size mismatch”,画面晃动是因为这个才引起的吗?有没有解决的办法啊** ![图片说明](https://img-ask.csdn.net/upload/201909/10/1568077630_970308.png)
如何在windows下得到YUV摄像头原始的数据?
因为我想要快速地从我的开发板传数据到电脑,因此我尝试使用USB的视频类模式来传输。 在Linux主机上,我用python的一个库pygame成功地获取到了YUV摄像头原始的数据, 但是在windows下却遇到了问题。 下面是我做过的事: 1.将我的开发板设置成USB摄像头,然后像发送图片一样发送自定义的数据。 if(connected) { // Send 614400 byte of mydata uvcdSendImage( (UINT32)mydata, 614400, 0); // Wait to end while(!uvcdIsReady()); } 2.在Linux主机上,我用python的库pygame连接USB摄像头,用下面的代码成功获取数据。 但是Window下的pygame没有 “get_raw()”这个函数。所以我没办法得到摄像头的原始数据。 pygame.init() pygame.camera.init() cameras = pygame.camera.list_cameras() cam = pygame.camera.Camera(cameras[0],(WIDTH,HEIGHT),"YUV") cam.start() while receive_size > UVC_SIZE_QQVGA: raw_data = raw_data + cam.get_raw() receive_size = receive_size - UVC_SIZE_QQVGA raw_data = raw_data + cam.get_raw() cam.stop() 3.然后我尝试在windows下使用 OpenCV(python和C++都尝试过)来获取数据, 但是opencv得到的数据 是转换后的BGR格式的数据,这也不是我想要的。 4.最后我使用windows下另外一个操作摄像头的python库VideoCapture(http://videocapture.sourceforge.net/)。 库里面有个函数叫 "getBuffer()",用这个函数,我好像可以得到YUV摄像头的原始数据,我的意思是开发板发送从摄像头获取到的 数据时,电脑端能够收到数据(我并不知道这是原始的数据还是转化后的数据)。但是当我传输我自定义的数据时(发送的数据和一张图的大小是一样的), 电脑端就不能够得到数据了。 另外我发现了一个现象,当我在开发板上发送自定义的数据时,我打开windows自带的摄像头采集软件Ecap.exe,最开始显示窗口什么也没有。 但当我点击了“录像”按钮,显示就有反应了,我知道这个时候开发板上的数据传上电脑了。 网上搜索了一大圈,也没有找到答案。我最终的目的是利用USB快速传输任意的数据,然后电脑端能够接收。串口慢了,USB的HID模式也不够快。希望可以得到大家的帮助。谢谢。
MFC框架下自定义类中定义多线程问题
本人尝试在MFC框架下自定义一个类,该类负责接收和解码视频数据,因此需要在该类中定义多线程来做这件事情,以防止在对话框调用该类的时候卡死。 目前本人在自定义类中使用了static的方式开启了多线程,在win10下运行也很正常。然而在测试兼容性的时候发现该程序在win7 64位下会出错,出错的原因似乎是因为我在类内使用了static函数定义了多线程,而我又声明了该类的几个实体,因此static函数出现了调用实体出错的问题。 想问问看: 1.有没有老哥遇到过这种问题? 2.有没有比较好的解决思路? 3.是不是不应该在一个类中用static函数的形式定义线程? 4.像多路接收解码的功能除了封装成一个类然后使用多个实体来做外,还有没有更好的封装方式? ``` class HWdecode { public: bool changertspurl = false;//是否改变rtsp的地址标志 bool reconnect = false;//需要断线重连标志 bool haveconnect = false;//正常连接标志位 CCriticalSection* mlock;//线程临界区 bool dodecodesave = false;//像素转换开启标志位 //参数对象 FFmpegDemuxer* demuxer = NULL;//FFMPEG对象 CUcontext cuContext;//Cuda设备 NvDecoder* dec = NULL;//Cuda解码对象 CUdeviceptr dpFrame = 0;//数据存储对象初始化 int hwinit()//显卡设备初始化 { int iGpu = 0;//选择解码播放的GPU,只有一个的话直接设置为0就行 //检测硬件GPU设备 ck(cuInit(0)); int nGpu = 0; ck(cuDeviceGetCount(&nGpu)); if (iGpu < 0 || iGpu >= nGpu) { std::cout << "没有相应的GPU" << std::endl; return 0; } //获得CUDA对象 CUdevice cuDevice = 0; ck(cuDeviceGet(&cuDevice, iGpu)); char szDeviceName[80]; ck(cuDeviceGetName(szDeviceName, sizeof(szDeviceName), cuDevice)); std::cout << "GPU in use: " << szDeviceName << std::endl; ck(cuCtxCreate(&cuContext, CU_CTX_SCHED_BLOCKING_SYNC, cuDevice)); return 1; } int ffmpeginit(char* url)//ffmpeg对象初始化 { demuxer = new FFmpegDemuxer(url); if (demuxer->fmtc == NULL) { return 0; } else { //RGBA帧存储显存初始化 return 1; } } void cudadecoderinit()//cuda解码对象初始化 { ck(cuMemAlloc(&dpFrame, demuxer->GetWidth() * demuxer->GetHeight() * 4)); //解码器初始化 dec = new NvDecoder(cuContext, (*demuxer).GetWidth(), (*demuxer).GetHeight(), true, FFmpeg2NvCodecId((*demuxer).GetVideoCodec())); } DWORD decAndshow()//解码和播放 { int nVideoBytes = 0, nFrameReturned = 0, nFrame = 0; uint8_t* pVideo = NULL, ** ppFrame; long bt = clock(); do { uint8_t* getdpframe = (uint8_t*)dpFrame; demuxer->Demux(&pVideo, &nVideoBytes);//获取一帧视频数据 dec->Decode(pVideo, nVideoBytes, &ppFrame, &nFrameReturned);//解码这一帧数据 //if (!nFrame && nFrameReturned) // LOG(INFO) << HWD.dec->GetVideoInfo(); if (dodecodesave) { for (int i = 0; i < nFrameReturned; i++) { mlock->Lock(); //对解码出来的图像数据类型做转换,转到BGRA printf("GetWidth %d\n", dec->GetWidth()); printf("GetHeight %d\n", dec->GetHeight()); if (dec->GetBitDepth() == 8) { if (dec->GetOutputFormat() == cudaVideoSurfaceFormat_YUV444) YUV444ToColor32<RGBA32>((uint8_t*)ppFrame[i], dec->GetWidth(), getdpframe, 4 * dec->GetWidth(), dec->GetWidth(), dec->GetHeight()); else // default assumed as NV12 Nv12ToColor32<RGBA32>((uint8_t*)ppFrame[i], dec->GetWidth(), getdpframe, 4 * dec->GetWidth(), dec->GetWidth(), dec->GetHeight()); } mlock->Unlock(); } } nFrame += nFrameReturned; } while (nVideoBytes && changertspurl == false); changertspurl = false;//将rtsp地址修改标志位重新设置为否 printf("退出,尝试断线连回\n"); reconnect = true; delete demuxer; std::cout << "Total frame decoded: " << nFrame << std::endl; std::cout << "花费时间:" << clock() - bt << "ms" << std::endl; std::cout << "FPS:" << nFrame / ((clock() - bt) / 1000.0) << std::endl; return 1; } HANDLE pRecvAndShowThread;//接收显示线程对象 static DWORD ThreadRtspRecvShowFun(LPVOID lpParam) { return ((HWdecode*)lpParam)->decAndshow();//调用线程的处理函数 } int Star(char* url, CCriticalSection * lock) { mlock = lock; if (!hwinit())//初始化硬件设备 { std::cout << "硬件初始化失败!" << std::endl; return 0; } if (!ffmpeginit(url))//初始化硬件设备 { std::cout << "无法连接码流!" << std::endl; return 0; } cudadecoderinit(); pRecvAndShowThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)HWdecode::ThreadRtspRecvShowFun, this, 0, NULL); return 1; } int ReStar(char* url, CCriticalSection* lock)//断线重连 { if (!ffmpeginit(url))//初始化硬件设备 { std::cout << "无法连接码流!" << std::endl; return 0; } if (!haveconnect) { cudadecoderinit(); } pRecvAndShowThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)HWdecode::ThreadRtspRecvShowFun, this, 0, NULL); return 1; } }; ```
这个bmp的RGB转YUV,再用Y值输出灰度图为什么运行不出来?
# 谢谢诸位大佬,我觉得没什么毛病了啊…… ``` #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; /* bmp文件头 */ #pragma pack(1) typedef struct BMPFILEHEADER { BYTE bfType; //文件类型,必须是0x424D,即字符“BM” DWORD bSize; // 文件的大小 WORD bReserved1; // 保留值,必须设置为0 WORD bReserved2; // 保留值,必须设置为0 DWORD bOffset; // 文件头的最后到图像数据位开始的偏移量 }BMPHeader; #pragma pack() /* 位图数据信息结构*/ #pragma pack(1) typedef struct BMP_INFO { DWORD bInfoSize; // 结构的大小 long bWidth; // 图像的宽度 long bHeight; // 图像的高度 WORD bPlanes; // 图像的平面数 WORD bBitCount; // 颜色/像素的位数 DWORD bCompression; // 压缩类型 DWORD bmpImageSize; // DIB数据区的大小,以字节为单位 long bXPelsPerMeter; // 水平分辨率 long bYPelsPerMeter; // 垂直分辨率 DWORD bClrUsed; // 使用的色彩数 DWORD bClrImportant; // 重要的颜色数 }BMPInfo; #pragma pack() /* 彩色表:调色板 */ #pragma pack(1) typedef struct RGB_QUAD { BYTE rgbBlue; // 蓝色强度 BYTE rgbGreen; // 绿色强度 BYTE rgbRed; // 红色强度 BYTE rgbReversed; // 保留值 }RGB; #pragma pack() int main() { FILE *fp,*fg; BMPHeader *fh; BMPInfo *fi; RGB *fq; BYTE data[2000][2000][3]; //存储RGB图像的像素点 BYTE yuv[2000][2000][3]; //yuv BYTE data_gray[2000]; //存储灰度图像的像素点 int i,j,k; printf("%d",0); fp=fopen("test.bmp","rb"); //打开bmp文件 if (fp==NULL){ printf("Can't open the file!\n"); return 0; } fh=(BMPHeader*)malloc(sizeof(BMPHeader)); fi=(BMPInfo*)malloc(sizeof(BMPInfo)); //读取位图头结构和信息头 fread(fh,sizeof(BMPHeader),1,fp); fread(fi,sizeof(BMPInfo),1,fp); //修改头信息 fi->bBitCount=8; fi->bmpImageSize=((fi->bWidth*3+3)/4)*4*fi->bHeight; //fi->biClrUsed=256; fh->bOffset=sizeof(BMPHeader)+sizeof(BMPInfo)+256*sizeof(RGB); fh->bSize=fh->bOffset+fi->bmpImageSize; printf("%d",123); for(i=0;i<fi->bHeight;i++) //读取RGB图像像素 { for(j=0;j<(fi->bWidth+3)/4*4;j++) { for(k=0;k<3;k++){ fread(&data[i][j][k],1,1,fp); } } } /*rgb2yuv*/ for(i=0;i<fi->bHeight;i++) { for(j=0;j<(fi->bWidth+3)/4*4;j++) { yuv[i][j][0]=0.299*data[i][j][2]+0.587*data[i][j][1]+0.114*data[i][j][0];//Y yuv[i][j][1]=0.493*(data[i][j][2]-yuv[i][j][0]);//U yuv[i][j][2]=0.877*(data[i][j][2]-yuv[i][j][0]);//V } } /*创建灰色图像*/ fg=fopen("gray.bmp","wb"); if(fg==NULL) printf("Wrong!(write a gray bmp)\n"); //创建调色板 fq=(RGB*)malloc(256*sizeof(RGB)); for(i=0;i<256;i++) { fq[i].rgbBlue=fq[i].rgbGreen=fq[i].rgbRed=i; //fq[i].rgbReversed=0; } fwrite(fh,sizeof(BMPHeader),1,fg); //将头信息写入 fwrite(fi,sizeof(BMPInfo),1,fg); fwrite(fq,sizeof(RGB),256,fg); for(i=0;i<fi->bHeight;i++){ //读取yuv中的Y值并写入灰度图 for(j=0;j<(fi->bWidth+3)/4*4;j++){ data_gray[j]=(int)yuv[i][j][0]; } fwrite(data_gray,j,1,fg); } free(fh); free(fi); free(fq); fclose(fp); fclose(fg); return 0; } ```
bitmap转YUV420之后的图片和原图有色差
转换算法如下 void encodeYUV420SP(byte[] yuv420sp, int[] argb, int width, int height) { final int frameSize = width * height; int yIndex = 0; int uvIndex = frameSize; int a, R, G, B, Y, U, V; int index = 0; for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { R = (argb[index] & 0xff0000) >> 16; G = (argb[index] & 0xff00) >> 8; B = (argb[index] & 0xff) >> 0; // well known RGB to YUV algorithm Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16; U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128; V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128; // NV21 has a plane of Y and interleaved planes of VU each sampled by a factor of 2 // meaning for every 4 Y pixels there are 1 V and 1 U. Note the sampling is every other // pixel AND every other scanline. yuv420sp[yIndex++] = (byte) ((Y < 0) ? 0 : ((Y > 255) ? 255 : Y)); if (j % 2 == 0 && index % 2 == 0) { yuv420sp[uvIndex++] = (byte) ((V < 0) ? 0 : ((V > 255) ? 255 : V)); yuv420sp[uvIndex++] = (byte) ((U < 0) ? 0 : ((U > 255) ? 255 : U)); } index++; } } }
用 ffmpeg命令行工具实现 屏幕与摄像头图像叠加(摄像头图像叠加上屏幕图右下角) 后推流命令,发现会卡,怎么解决呢?
问题:用 ffmpeg命令行工具实现 屏幕与摄像头图像叠加(摄像头图像叠加上屏幕图右下角) 后推流,发现会卡,怎么解决呢? 我的命令:ffmpeg -f gdigrab -framerate 30 -video_size 1920x1080 -i desktop -f dshow -framerate 30 -video_size 640x480 -i video="HD USB Camera" -filter_complex "overlay=main_w-overlay_w-10:main_h-overlay_h-10" -c:v libx264 -r 30 -b:v 1500k -pix_fmt yuv420p -tune zerolatency -preset ultrafast -f flv -y "rtmp://localhost/live/demo" 这里 "HD USB Camera" 是我的相机名称。 我发现跟命令中输入源的顺序有关,但是图像叠加是默认第一输入是背景图,第二输入是前景图的,所以若更换顺序,虽然不卡了,但却不能实现叠加效果,怎么办呢??另外因为某些原因我这里一定是使用 gdigrab 来捕获桌面的。
android获取图像的yuv信息
本人菜鸟。建了一个app能调用系统相机,想在缩略图时获取图像yuv信息,最后得到图像亮度y信息。麻烦大神帮助一下
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问