python中的waitKey语句总是出错,为何我执行完出来画面后就卡了?

import cv2
lena = cv2.imread("lena.bmp")
cv2.imshow("demo",lena)
key = cv2.waitKey(2000)
if key == ord('T'):
cv2.destroyWindow("demo")

我对上述语句的理解是:先把lena的这个图片展示在名字为demo的窗口上,
然后在2000毫秒内,若点击的键是T的话,将会让名字叫demo的窗口消失。

可是我执行后,按了T键,就卡住了,请问这是为什么?

1个回答

print(key)
print(ord('T'))
看看两者是否相等

key = cv2.waitKey(2000)
换成0或者10000,看看是不是没来得及

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python使用opencv中的imshow时出错,无法显示图片
python使用opencv中imshow语句时报错,窗口就是灰色的没有图片,错误提示cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow' 求大神帮忙解决 下面是代码 import cv2 #加载图片 image=cv2.imread('‪SS09001.JPG') #建立一个窗口 cv2.namedWindow('image') #展示 cv2.imshow('image',image) cv2.waitKey()
C#调用C++写的opencv的dll,waitkey函数无效怎么办
C#调用C++xie'deopencv的dll,waitkey函数无效怎么办
Python OpenCV Canny错误待解
买了一本OpenCV的书,在使用Canny进行边缘检测的时候出现了声明错误 代码片段如下: ``` import cv2 import matplotlib.pyplot as plt o=cv2.imread("lena.bmp", cv2.IMREAD_GRAYSCALE) r1 = cv2.Canny(o,128,200) cv2.imshow("result1",r1) cv2.waitKey() cv2.destroyAllWindows() ``` 书上是这么写的,但是我用起来就会报错,报错内容如下: ``` Exception has occurred: error OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow' File "F:\learn_python\Models\test.py", line 6, in <module> cv2.imshow("result1",r1) ``` 其中```cv2.imshow```里面的双引号和单引号都试过,报同样的错误。
小白,想用Python3.7+Opencv4.1.1+APP:IP摄像头,调用手机的摄像头。 结果出现如下状况,还请各位大佬指点!
小白,想用Python3.7+Opencv4.1.1+APP:IP摄像头,调用手机的摄像头。 结果出现如下状况,还请各位大佬指点! ``` import cv2 url = 'http://192.168.0.101:8081/' cap = cv2.VideoCapture(url) while (1): ret, frame = cap.read() cv2.imshow('', cap.read()) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 我修改了一下,代码成这样了 ``` import cv2 url = 'http://192.168.0.101:8081' cap = cv2.VideoCapture(url) while cap.isOpened(): ret, frame = cap.read() cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 运行并没有反应,我感觉直接没有进while,也就是说摄像头根本没数据流,请问各位大佬怎么改呢?
python openCV怎么才能实现快速遍历一个视频
我现在只知道逐帧显示视频,waitkey(1)这种方法,还有没有更快的方法呢,waitkey(1)是不是还会因为电脑配置的不同而改变速度,比如低配置电脑在对输出视频的同时对帧进行操作会很慢
Python OpenCV人脸识别错误待解
在编写人脸识别的时候(代码如下): ``` import cv2 import numpy as np cascPath = "C:\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml" faceCascade = cv2.CascadeClassifier(cascPath) video_capture = cv2.VideoCapture(0) while True: ret, frame = video_capture.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=10, #Adjust accuracy minSize=(50, 50), flags=cv2.CASCADE_SCALE_IMAGE ) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 255, 255), 2) cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break if cv2.waitKey(1) & 0xFF == ord('s'): cv2.imwrite('test1.png', frame) img = cv2.imread("test1.png") face = img[x:x+w,y:y+h] cv2.imshow('Face', face) cv2.imwrite("face_detected.png", face) images=[] images.append(cv2.imread("klp.jpg",cv2.IMREAD_GRAYSCALE)) images.append(cv2.imread("wh.jpg",cv2.IMREAD_GRAYSCALE)) images.append(cv2.imread("wk.jpg",cv2.IMREAD_GRAYSCALE)) Labels=[0,1,2] recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.train(images, np.array(Labels)) predict_image = cv2.imread("face_detected.png",cv2.IMREAD_GRAYSCALE) label,confidence= recognizer.predict(predict_image) print("Label=", label) print("Confidence=", confidence) video_capture.release() cv2.destroyAllWindows() ``` 出现了如下问题: ``` Exception has occurred: error OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::setSize' File "F:\learn_python\Models\DetectFace&Recognize.py", line 41, in <module> recognizer.train(images, np.array(Labels)) ```
python-opencv无法打开摄像头
在linux下,使用python无法打开摄像头,第一次编译程序是没有任何反映,第二次就显示libv4l2: error setting pixformat: Device or resource busy HIGHGUI ERROR: libv4l unable to ioctl S_FMT libv4l2: error setting pixformat: Device or resource busy libv4l1: error setting pixformat: Device or resource busy libv4l2: error setting pixformat: Device or resource busy libv4l1: error setting pixformat: Device or resource busy HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT 这种错误,此后一直显示资源繁忙。但是使用opencv能够正常的打开摄像头。以下是python的程序import cv2 import numpy as np cap = cv2.VideoCapture(0) while(1): # get a frame ret, frame = cap.read() # show a frame cv2.imshow('capture', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() 求大神帮忙解决,没有人有类似的问题吗
python3.6用opencv修复图片
如图,图片左侧边缘有一个黑色的块,想用opencv的inpaint方法修复,但是这个方法必须要提供一个图像的掩码,而且大小要必须一样,另外一点这个图片黑点的位置是不确定的,小弟刚接触python不久,求助一下有没人做过类似的或者提供一些别的思路,感激不尽~ ![图片说明](https://img-ask.csdn.net/upload/201708/14/1502726387_172811.jpg) ![图片说明](https://img-ask.csdn.net/upload/201708/15/1502726551_899870.jpg) 代码如下: ``` import numpy as np import cv2 img = cv2.imread('1.png') #原图 mask = cv2.imread('r.png',0) #掩码 dst = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA) cv2.imshow('dst',dst) cv2.waitKey(0) cv2.destroyAllWindows() ```
基于Python-opencv的人脸识别检测
1.人脸识别检测已经做出来了,现在需要多加一个功能,就是在人脸定位了之后,要对人脸进行覆盖,就是用图片把人脸覆盖。这个功能我不会,求各位大神帮一下子。 我的代码如下: import cv2 face_cascade = cv2.CascadeClassifier('E:\openCV\opencv\sources/data/haarcascades/haarcascade_frontalface_alt2.xml') cap = cv2.VideoCapture(0) while True: ret,img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('img',img) if cv2.waitKey(1) &0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
opencv实现边缘梯度直方图+meanshift实现框选物体跟踪,代码出错,不知道错在哪里?
``` #include<iostream> #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<ctype.h> using namespace std; using namespace cv; Mat image; //当前帧图像 Mat imageCopy; //用于拷贝的当前帧图像 Mat rectImage; //子图像 Point beginPoint; //矩形框起点 Point endPoint; //矩形框终点 bool leftButtonDownFlag = false; //左键单击后视频暂停播放的标志位 int frameCount = 0; //帧数统计 int trackCount = 0; //等于1时初始化直方图 void onMouse(int event, int x, int y, int flags, void* ustc); //鼠标回调函数 int main(int argc, char* argv[]) { VideoCapture capture("1.AVI"); //VideoCapture capture(0); int capture_fps = capture.get(CV_CAP_PROP_FPS); //获取视频帧率 int capture_count = capture.get(CV_CAP_PROP_FRAME_COUNT); int capture_width = capture.get(CV_CAP_PROP_FRAME_WIDTH); int capture_height = capture.get(CV_CAP_PROP_FRAME_HEIGHT); cout << "视频帧率:" << capture_fps << endl; cout << "视频帧数:" << capture_count << endl; cout << "视频宽度:" << capture_width << endl; cout << "视频高度:" << capture_height << endl; int pauseTime = 1000 / capture_fps; //两幅画面中间间隔 namedWindow("Video"); setMouseCallback("Video", onMouse);//函数setMousecallback用于鼠标在图上做标记等作用 int hbinNum = 16;//每一维上直方图的个数,如果是一维直方图,就是竖条(bin)的个数 float hranges[] = { 40, 250 };//每一维数值的取值范围数组 const float* phranges = hranges;//const修饰phranges指针,指针phranges的指向可以修改,但是phranges指向的值不可以改;指针phranges指向的是hranges的首地址 bool backprojectMode = false; namedWindow("Video", 0); capture >> image; int rows = image.rows; int cols = image.cols; Mat image1 = image.clone(); Mat dst, edge, gray;//定义canny边缘检测所需的变量 Mat abs_grad_x, abs_grad_y;//定义sobel算子求方向梯度所需的变量 Mat grad_x(rows, cols, CV_8UC1, Scalar::all(0));//定义sobel算子求方向梯度所需的变量 Mat grad_y(rows, cols, CV_8UC1, Scalar::all(0));//定义sobel算子求方向梯度所需的变量 Mat theta(rows, cols, CV_32FC1, Scalar::all(0)); Mat gradient(rows, cols, CV_32FC1, Scalar::all(0));//梯度矩阵 Mat angle(rows, cols, CV_32FC1, Scalar::all(0));//梯度方向角度 Mat mask, hist, histImg = Mat::zeros(image.size(), image.type()), backproj;//初始化histImg存储直方图数据,使其规格与捕获的image相同 Rect trackWindow;//定义一个捕捉矩形窗口 //**********************读取视频******************************** while (true) { if (!leftButtonDownFlag) //鼠标左键按下绘制矩形时,视频暂停播放 { capture >> image;//读取当前帧 frameCount++; //帧数增加,视频向前增加 } if (!image.data || waitKey(pauseTime + 30) == 27) //当当前帧的数据为空或两帧画面的时间间隔不满足规定的数值时,退出播放 { break; } //***************camshiftdemo代码的脉络分析******************** //提取边缘梯度大小与幅值 if (trackCount > 0) { dst.create(image1.size(), image1.type()); dst = Scalar::all(0); cvtColor(image1, gray, COLOR_BGR2GRAY); GaussianBlur(gray, edge, Size(3, 3), 0, 0); Canny(edge, edge, 3, 9, 3);//canny算子获得边缘图 Sobel(gray, grad_x, CV_16S,1, 0, 3, 1, 1);//求X方向的梯度 Sobel(gray, grad_y, CV_16S,0, 1, 3, 1, 1);//求Y方向的梯度 cartToPolar(grad_x, grad_y, gradient, angle);//计算梯度方向与梯度幅值 convertScaleAbs(grad_x, grad_x); convertScaleAbs(grad_y, grad_y); //绘制直方图 if (trackCount == 1) { histImg = Scalar::all(0); Mat roi(angle, Rect(beginPoint, endPoint)), maskroi(mask, Rect(beginPoint, endPoint)); calcHist(&roi, 1, 0, maskroi, hist, 1, &hbinNum, &phranges);//掩膜maskroi是用来确定输入图像的哪些像素被计数;mask也设置ROI, 是要让hue中截取出来放在mask中的 区域大小位置都和hue中一致, 不要改变原来的位置这点很有用。 normalize(hist, hist, 0, 255, CV_MINMAX); trackCount++; trackWindow = Rect(beginPoint, endPoint); } calcBackProject(&angle, 1, 0, hist, backproj, &phranges);//直方图反向投影 backproj &= mask; meanShift(backproj, trackWindow, TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1));//CamshiftDemo //***画出跟踪区域的位置 if (backprojectMode) { cvtColor(backproj, image, CV_GRAY2BGR); } rectangle(image, Point(trackWindow.x, trackWindow.y), Point(trackWindow.x + trackWindow.width, trackWindow.y + trackWindow.height), Scalar(0, 0, 255), 1, CV_AA);//画跟踪矩形框 trackCount++; // writer << image; } imshow("Video", image); } waitKey(0); return 0; } //鼠标回调函数 void onMouse(int event, int x, int y, int flags, void *ustc) { if (event == CV_EVENT_LBUTTONDOWN) { leftButtonDownFlag = true; //标志位 beginPoint = Point(x, y); //设置左键按下点的矩形起点 endPoint = beginPoint; } if (event == CV_EVENT_MOUSEMOVE && leftButtonDownFlag) { imageCopy = image.clone(); endPoint = Point(x, y); if (beginPoint != endPoint) { //在复制的图像上绘制矩形 rectangle(imageCopy, beginPoint, endPoint, Scalar(0, 0, 255), 2); } imshow("Video", imageCopy); } if (event == CV_EVENT_LBUTTONUP) { leftButtonDownFlag = false; Mat subImage = image(Rect(beginPoint, endPoint)); //子图像 rectImage = subImage.clone(); trackCount = 1; //imshow("Sub Image", rectImage); } } ```
pycharm 打开摄像头失败
# pycharm 打开摄像头失败 ## 环境 pycharm2019.2,python3.7 ,Mac OS X10.14 ```py import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow("Video", frame) if cv2.waitKey(1) == 27: break cap.release() cv2.destroyAllWindows() ``` 报错 /usr/local/bin/python3.7 "/Users/pig/学习/编程练习/Pycharm/Python 2.7/cv_test/test11.py" Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
Python及OpenCV视频实时人脸覆盖
视频实时人脸检测功能已经做出来了就差人脸覆盖了,求助,我的代码如下,请各位大神直接在我的代码里加入人脸覆盖代码即可,谢谢; import cv2 face_cascade = cv2.CascadeClassifier('E:\openCV\opencv\sources/data/haarcascades/haarcascade_frontalface_alt2.xml') cap = cv2.VideoCapture(0) while True: ret,img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('img',img) if cv2.waitKey(1) &0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
python调用cv2.findContours时报错:ValueError: not enough values to unpack (expected 3, got 2)
完整代码如下: ``` import cv2 import numpy as np img = np.zeros((200, 200), dtype=np.uint8) img[50:150, 50:150] = 255 ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) img = cv2.drawContours(color, contours, -1, (0,255,0), 2) cv2.imshow("contours", color) cv2.waitKey() cv2.destroyAllWindows() ``` 但是cv2.findContours报如下错误: ValueError: not enough values to unpack (expected 3, got 2) python版本为3.6,opencv为4.0.0
python opencv 如何在控制台返回cv2.putTest()在图片上添加的文字
我使用cv2.putText()在图片上添加文字,将添加到图片上的文字获取并在控制台输出,但是控制台返回的内容跟我在图片上添加的文字不同。 ``` str1 = ' ' predint=prediction.eval(feed_dict={x_: [result],keep_prob: 1.0}, session=sess) cv2.putText(img2, "%d" % predint, (x, y - 1), font, 1, (0, 255, 0)) str1 = str1 + str(predint[0]) cv2.imshow("thbw", thbw) cv2.imshow("contours", img2) cv2.imwrite("sample02.jpg", img2) cv2.waitKey() cv2.destroyAllWindows() print(str1) ``` sample02:![图片说明](https://img-ask.csdn.net/upload/201905/10/1557475395_467925.jpg) 但是控制台使用print(str1)输出的内容是:5455655798558494055215532344445467446337393914403312333334522542627229291828121222510121113115416711253657459
opencv+python 调用摄像头黑屏,奇怪的是用debug启动就可以显示
``` import cv2 cap = cv2.VideoCapture(0) while (1): ret,frame = cap.read() cv2.imshow('opencvCut',frame) if cv2.waitKey(100)== ord('q'): break cap.release() cv2.destroyAllWindows() ``` ![无法显示](https://img-ask.csdn.net/upload/201905/15/1557907118_913314.png) debug启动 ![DEBUG启动可以显示](https://img-ask.csdn.net/upload/201905/15/1557907205_963405.png)
malloc(): memory corruption (fast): C++ opencv编写出错
好象是亮度调整那里出错了,可是不知道怎么改 ``` int main(){ Mat re_src_image; Mat src_image = imread("/home/zn/桌面/13740146-f01b848b12b93174.png",1); if(! src_image.data){ cout << "Couldn't find the image!\n"; return false; } else { resize(src_image, re_src_image, Size(640, 480)); vector<Mat> channels; split(re_src_image, channels); re_src_image = channels.at(2); } //亮度调整 int ContrastValue = 100; int BrightValue = 0; Mat light_image = Mat::zeros(re_src_image.size(), re_src_image.type()); for (int y = 0; y < re_src_image.rows; y++) { for (int x = 0; x < re_src_image.cols; x++) { for (int c = 0; c < 3; c++){ light_image.at<Vec3b>(y, x)[c] = (ContrastValue*0.01)*(re_src_image.at<Vec3b>(y, x)[c]) + BrightValue; } } } imshow("a",re_src_image); while(1){ if(waitKey(0)==27) break; } return 0; } ```
Python+SIFT问题,怎么出只有特征点引出箭头的图呢
``` img = cv2.imread('111.jpg') gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) sift = cv2.xfeatures2d.SIFT_create() kp = sift.detect(gray,None) print(type(kp), type(kp[0])) # <class 'list'> <class 'cv2.KeyPoint'> print(len(kp), kp[0].pt) # 1525 (20.279071807861328, 251.05355834960938) # 可以看出共有1525个sift特征,第一个特征点的坐标 des = sift.compute(gray,kp) print(type(kp), type(des)) # <class 'list'> <class 'tuple'> print(type(des[0]), type(des[1])) # <class 'list'> <class 'numpy.ndarray'> # des[0]为关键点的list,des[1]为特征向量的矩阵 print(des[1].shape) # (1525, 128) 可以看出共有1525个sift特征,每个特征为128维 kp, des=sift.detectAndCompute(gray,None) print(type(kp), des[1].shape) # <class 'list'> (128,) img = cv2.drawKeypoints(gray, kp, outImage=des[1],flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow('dst',img) if cv2.waitKey(0) & 0xff == 27: cv2.destroyAllWindows() ``` ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559097447_433608.png) 这样的图里有特征点还有方向 我想出下面的图 ![图片说明](https://img-ask.csdn.net/upload/201905/29/1559097515_886146.png) 只有特征点引出箭头的图怎么用Python写
Python程序中能调用外部库但是cmd中运行opencv工具报错没有外部的库
``` #-*- encoding: UTF-8 -*- import cv2 import numpy import argparse import Image import time from naoqi import ALProxy from naoqi import ALBroker def nothing(x): pass def choseHSV(filePath): img=cv2.imread(filePath,1) hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) cv2.namedWindow("image",cv2.WINDOW_NORMAL) cv2.createTrackbar('minH','image',0,179,nothing) cv2.createTrackbar('minS','image',0,255,nothing) cv2.createTrackbar('minV','image',0,255,nothing) cv2.createTrackbar('maxH','image',0,179,nothing) cv2.createTrackbar('maxS','image',0,255,nothing) cv2.createTrackbar('maxV','image',0,255,nothing) while(1): minH=cv2.getTrackbarPos('minH','image') minS=cv2.getTrackbarPos('minS','image') minV=cv2.getTrackbarPos('minV','image') maxH=cv2.getTrackbarPos('maxH','image') maxS=cv2.getTrackbarPos('maxS','image') maxV=cv2.getTrackbarPos('maxV','image') thresholdMin = numpy.array([minH, minS, minV]) thresholdMax = numpy.array([maxH, maxS, maxV]) mask=cv2.inRange(hsv,thresholdMin,thresholdMax) res=cv2.bitwise_and(img,img,mask = mask) cv2.imshow('image',res) k=cv2.waitKey(1) if k==ord('q'): break cv2.destroyAllWindows() def readRobotTemperature(): pass def takePhotos(cameraID, robotIP, port): CAMERA = ALProxy("ALVideoDevice", robotIP, port) CAMERA.setActiveCamera(cameraID) # VGA 设置分辨率为2:640*480 0:160*120 resolution = 2 # RGB 设置颜色空间为RGB colorSpace = 11 videoClient = CAMERA.subscribe("python_client", resolution, colorSpace, 5) #设置曝光度模式 CAMERA.setCamerasParameter(videoClient,22,2) time.sleep(0.5) #获取照片 naoImage = CAMERA.getImageRemote(videoClient) CAMERA.unsubscribe(videoClient) imageWidth = naoImage[0] imageHeight = naoImage[1] array = naoImage[6] #装换为PIL图片格式 img = Image.fromstring("RGB", (imageWidth, imageHeight), array) img.save("photo.png", "PNG") def test(): broker = ALBroker("broker","0.0.0.0",0,"127.0.0.1",9559) MOTION = ALProxy("ALMotion") MOTION.moveTo(1,0,0) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--filePath", type=str, help="file path.") args = parser.parse_args() choseHSV(args.filePath) #takePhotos(0, "192.168.1.103", 9559) #test() ``` 以上就是代码,代码是一个tools工具,没有问题,但是一用cmd命令运行以下命令: tools.py --filePath pic.png (最后那是一个图片) 就会报错没有XXX库,我调试了一下,发现所有的外部库它都会报错,不知道这是个什么问题,有没有大神能帮我看看,谢谢了先
python opencv 图片前景与背景的分割,拜大神求如何改错
在网上找到了一个用Kmeans算法对图片前景与背景的分割的例子,很适合现在的学习,可一直有一个错误不会修改,跪求大神了。 ``` ```# -*- coding: utf-8 -*- import cv2 import numpy as np import math def panelAbstract(srcImage): # read pic shape imgHeight,imgWidth = srcImage.shape[:2] imgHeight = int(imgHeight);imgWidth = int(imgWidth) # 均值聚类提取前景:二维转一维 imgVec = np.float32(srcImage.reshape((-1,3))) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,10,1.0) flags = cv2.KMEANS_RANDOM_CENTERS label,clusCenter = cv2.kmeans(imgVec,2,None,criteria,10,flags) clusCenter = np.uint8(clusCenter) clusResult = clusCenter[label.flatten()] imgres = clusResult.reshape((srcImage.shape)) imgres = cv2.cvtColor(imgres,cv2.COLOR_BGR2GRAY) bwThresh = int((np.max(imgres)+np.min(imgres))/2) _,thresh = cv2.threshold(imgres,bwThresh,255,cv2.THRESH_BINARY_INV) threshRotate = cv2.merge([thresh,thresh,thresh]) # 确定前景外接矩形 #find contours contours = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) minvalx = np.max([imgHeight,imgWidth]);maxvalx = 0 minvaly = np.max([imgHeight,imgWidth]);maxvaly = 0 maxconArea = 0;maxAreaPos = -1 for i in range(len(contours)): if maxconArea < cv2.contourArea(contours[i]): maxconArea = cv2.contourArea(contours[i]) maxAreaPos = i objCont = contours[maxAreaPos] # 旋转校正前景 rect = cv2.minAreaRect(objCont) for j in range(len(objCont)): minvaly = np.min([minvaly,objCont[j][0][0]]) maxvaly = np.max([maxvaly,objCont[j][0][0]]) minvalx = np.min([minvalx,objCont[j][0][1]]) maxvalx = np.max([maxvalx,objCont[j][0][1]]) if rect[2] <=-45: rotAgl = 90 +rect[2] else: rotAgl = rect[2] if rotAgl == 0: panelImg = srcImage[minvalx:maxvalx,minvaly:maxvaly,:] else: rotCtr = rect[0] rotCtr = (int(rotCtr[0]),int(rotCtr[1])) rotMdl = cv2.getRotationMatrix2D(rotCtr,rotAgl,1) imgHeight,imgWidth = srcImage.shape[:2] #图像的旋转 dstHeight = math.sqrt(imgWidth *imgWidth + imgHeight*imgHeight) dstRotimg = cv2.warpAffine(threshRotate,rotMdl,(int(dstHeight),int(dstHeight))) dstImage = cv2.warpAffine(srcImage,rotMdl,(int(dstHeight),int(dstHeight))) dstRotimg = cv2.cvtColor(dstRotimg,cv2.COLOR_BGR2GRAY) _,dstRotBW = cv2.threshold(dstRotimg,127,255,0) contours = cv2.findContours(dstRotBW,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) maxcntArea = 0;maxAreaPos = -1 for i in range(len(contours)): if maxcntArea < cv2.contourArea(contours[i]): maxcntArea = cv2.contourArea(contours[i]) maxAreaPos = i x,y,w,h = cv2.boundingRect(contours[maxAreaPos]) #提取前景:panel panelImg = dstImage[int(y):int(y+h),int(x):int(x+w),:] return panelImg if __name__=="__main__": srcImage = cv2.imread('11.jpg') a=panelAbstract(srcImage) cv2.imshow('figa',a) cv2.waitKey(0) cv2.destroyAllWindows() 这是原地址https://blog.csdn.net/Dawn__Z/article/details/82115160 报错如下(知道错是什么意思就是不会改):Traceback (most recent call last): File "D:\Workspaces\MyEclipse 2015\pythonTest\src\cc.py", line 70, in a=panelAbstract(srcImage) File "D:\Workspaces\MyEclipse 2015\pythonTest\src\cc.py", line 7, in panelAbstract imgHeight,imgWidth = srcImage.shape[:2] AttributeError: 'NoneType' object has no attribute 'shape'
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问