1. 程式人生 > >opencv︱圖片與視訊的讀入、顯示、寫出、放縮與基本繪圖函式介紹

opencv︱圖片與視訊的讀入、顯示、寫出、放縮與基本繪圖函式介紹

本文來自於段力輝 譯《OpenCV-Python 中文教程》

一、圖片 + 讀入、顯示、寫出

opencv中讀入、顯示、寫出圖片:cv2.imread(), cv2.imshow(), cv2.imwrite()

1、cv2.imread()

import numpy as np
import cv2

 # Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)

第二個引數是要告訴函式應該如何讀取這幅圖片。
• cv2.IMREAD_COLOR:讀入一副彩色影象。影象的透明度會被忽略,
這是預設引數。
• cv2.IMREAD_GRAYSCALE:以灰度模式讀入影象
• cv2.IMREAD_UNCHANGED:讀入一幅影象,並且包括影象的 alpha 通道

注意:
就算影象的路徑是錯的, OpenCV 也不會提醒你的,但是當你使用命令print img時得到的結果是None。

其中:
在Py3中若路徑中出現中文則需要以下的形式讀入:

cv2.imdecode(np.fromfile(img_name_1, dtype=np.uint8), -1)

其中,0-灰度,1-彩色

注意二:
有時候,cv2.imread('messi5.jpg')讀入之後,在ipython中會發生形變,感覺就跟通道換了一樣。這種只是形式上的變化,只要用cv2的輸出,還是一個色系,譬如下圖,左邊就是感覺顏色不對,但是通過cv2.imwrite匯出還是正常的。
這裡寫圖片描述

.

2、cv2.imshow()

使用函式 cv2.imshow() 顯示影象。視窗會自動調整為影象大小。第一個引數是視窗的名字,其次才是我們的影象。你可以建立多個視窗,只要你喜歡,但是必須給他們不同的名字

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

其中cv2.waitKey() 是一個鍵盤繫結函式。
cv2.destroyAllWindows() 可以輕易刪除任何我們建立的視窗。如果你想刪除特定的視窗可以使用 cv2.destroyWindow(),在括號內輸入你想刪除的視窗名。
.

3、cv2.imwrite()

使用函式 cv2.imwrite() 來儲存一個影象。首先需要一個檔名,之後才是你要儲存的影象

cv2.imwrite('messigray.png',img)

如果路徑帶中文:

cv2.imencode('.jpg', edges)[1].tofile('/../../1.jpg')

其中之前的’.jpg’是代表一種格式,如果是圖片一定得是.png或者.jpg
.

4、圖片放縮

目標:你可以對影象進行倍數的放大和縮小 也可以直接的輸入尺寸大小
變換的方法:

  • CV_INTER_NN - 最近鄰插值,
  • CV_INTER_LINEAR - 雙線性插值 (預設使用)
  • CV_INTER_AREA - 使用象素關係重取樣。當影象縮小時候,該方法可以避免波紋出現。當影象放大時,類似於 CV_INTER_NN
    方法..
  • CV_INTER_CUBIC - 立方插值.

如 我要將一個圖片變為32*32大小的

  image=cv2.imread('test.jpg')
  res=cv2.resize(image,(32,32),interpolation=cv2.INTER_CUBIC)
  cv2.imshow('iker',res)
  cv2.imshow('image',image)
  cv2.waitKey(0)
  cv2.destoryAllWindows()

.

案例一:opencv載入一個灰度圖

按下’s’鍵儲存後退出,或者按下 ESC 鍵退出不儲存。

import numpy as np
 import cv2

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
1k = cv2.waitKey(0)

if k == 27: 
    # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): 
    # wait for 's' key to save and exit
     cv2.imwrite('messigray.png',img)
     cv2.destroyAllWindows()

.

案例二:opencv+matplotib繪圖

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) 
     # to hide tick values on X and Y axis
plt.show()

注意:彩色影象使用 OpenCV 載入時是 BGR 模式。但是 Matplotib 是 RGB模式。所以彩色影象如果已經被 OpenCV 讀取,那它將不會被 Matplotib 正確顯示。

.

二、視訊的讀取、顯示、儲存

1、攝像頭捕獲視訊

為了獲取視訊,你應該建立一個 VideoCapture 物件。他的引數可以是裝置的索引號,或者是一個視訊檔案。裝置索引號就是在指定要使用的攝像頭。
一般的膝上型電腦都有內建攝像頭。所以引數就是 0。你可以通過設定成 1 或者其他的來選擇別的攝像頭。之後,你就可以一幀一幀的捕獲視訊了。但是最後,別忘了停止捕獲視訊。


import numpy as np
import cv2

cap = cv2.VideoCapture(0)

 while(True):
 # Capture frame-by-frame
     ret, frame = cap.read()

 # Our operations on the frame come here
     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

 # Display the resulting frame
     cv2.imshow('frame',gray)
     if cv2.waitKey(1) & 0xFF == ord('q'):
 break

 # When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

cap.read() 返回一個布林值(True/False)。如果幀讀取的是正確的,就是 True。所以最後你可以通過檢查他的返回值來檢視視訊檔案是否已經到
了結尾。
有時 cap 可能不能成功的初始化攝像頭裝置。這種情況下上面的程式碼會報錯。
你可以使用 cap.isOpened(),來檢查是否成功初始化了。如果返回值是True,那就沒有問題。否則就要使用函式 cap.open()。
你可以使用函式 cap.get(propId) 來獲得視訊的一些引數資訊。這裡propId 可以是 0 到 18 之間的任何整數。每一個數代表視訊的一個屬性,見
下表其中的一些值可以使用 ap.set(propId,value) 來修改, value 就是你想要設定成的新值。
例如,我可以使用 cap.get(3) 和 cap.get(4) 來檢視每一幀的寬和高。
預設情況下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 來把寬和高改成 320X240。
.

2、從檔案中播放視訊

與從攝像頭中捕獲一樣,你只需要把裝置索引號改成視訊檔案的名字。
在播放每一幀時,使用 cv2.waiKey() 設定適當的持續時間。如果設定的太低視訊就會播放的非常快,如果設定的太高就會播放的很慢(你可以使用這種方法控制視訊的播放速度)。通常情況下 25 毫秒就可以了。


import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)
# write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

注意: 你應該確保你已經裝了合適版本的 ffmpeg 或者 gstreamer。 如果你裝錯了那就比較頭疼了。
.

3、儲存視訊

在我們捕獲視訊,並對每一幀都進行加工之後我們想要儲存這個視訊。對於圖片來時很簡單隻需要使用 cv2.imwrite()。但對於視訊來說就要多做點工
作。
這次我們要建立一個 VideoWriter 的物件。我們應該確定一個輸出檔案的名字。接下來指定 FourCC 編碼(下面會介紹)。播放頻率和幀的大小也都需要確定。最後一個是 isColor 標籤。如果是 True,每一幀就是彩色圖,否則就是灰度圖。
FourCC 就是一個 4 位元組碼,用來確定視訊的編碼格式。可用的編碼列表可以從fourcc.org查到。這是平臺依賴的。下面這些編碼器對我來說是有用個。
下面的程式碼是從攝像頭中捕獲視訊,沿水平方向旋轉每一幀並儲存它。


import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
fourcc = cv2.cv.FOURCC(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        # write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

.

三、opencv中的繪圖函式

你將會學習到這些函式:cv2.line(), v2.circle(), cv2.rectangle(),cv2.ellipse(), cv2.putText()
上面所有的這些繪圖函式需要設定下面這些引數:
• img:你想要繪製圖形的那幅影象。
• color:形狀的顏色。以 RGB 為例,需要傳入一個元組,例如: (255,0,0)代表藍色。對於灰度圖只需要傳入灰度值。
• thickness:線條的粗細。如果給一個閉合圖形設定為 -1,那麼這個圖形就會被填充。預設值是 1.
• linetype:線條的型別, 8 連線,抗鋸齒等。預設情況是 8 連線。 cv2.LINE_AA為抗鋸齒,這樣看起來會非常平滑。

1、畫線:cv2.line

要畫一條線,你只需要告訴函式這條線的起點和終點。我們下面會畫一條從左上方到右下角的藍色線段。

import numpy as np
import cv2

# Create a black image
img=np.zeros((512,512,3), np.uint8)

# Draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(511,511),(255,0,0),5)

.

2、畫矩形

要畫一個矩形,你需要告訴函式的左上角頂點和右下角頂點的座標。這次我們會在影象的右上角話一個綠色的矩形。

cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

.

3、畫圓

要畫圓的話,只需要指定圓形的中心點座標和半徑大小。我們在上面的矩形中畫一個圓

cv2.circle(img,(447,63), 63, (0,0,255), -1)

.

4、畫橢圓

畫橢圓比較複雜,我們要多輸入幾個引數。一個引數是中心點的位置座標。
下一個引數是長軸和短軸的長度。橢圓沿逆時針方向旋轉的角度。橢圓弧演順時針方向起始的角度和結束角度,如果是 0 很 360,就是整個橢圓。檢視cv2.ellipse() 可以得到更多資訊。下面的例子是在圖片的中心繪製半個橢圓。

cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

.

5、畫多邊形

畫多邊形,需要指點每個頂點的座標。用這些點的座標構建一個大小等於行數 X1X2 的陣列,行數就是點的數目。這個陣列的資料型別必須為 int32。
這裡畫一個黃色的具有四個頂點的多邊形。

pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts=pts.reshape((-1,1,2))
# 這裡 reshape 的第一個引數為-1, 表明這一維的長度是根據後面的維度的計算出來的。

如果第三個引數是 False,我們得到的多邊形是不閉合的(首尾不相連)。
cv2.polylines() 可以被用來畫很多條線。 只需要把想要畫的線放在一個列表中,將這個列表傳給函式就可以了。每條線都會被獨立繪製。這會比用cv2.line() 一條一條的繪製要快一些。
.

6、在圖片上新增文字

要在圖片上繪製文字,你需要設定下列引數:
• 你要繪製的文字
• 你要繪製的位置
• 字型型別(通過檢視 cv2.putText() 的文件找到支援的字型)
• 字型的大小
• 文字的一般屬性如顏色,粗細,線條的型別等。為了更好看一點推薦使用linetype=cv2.LINE_AA。
在影象上繪製白色的 OpenCV。

font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)

所 有 的 繪 圖 函 數 的 返 回 值 都 是 None, 所 以 不 能 使 用 img =cv2.line(img,(0,0),(511,511),(255,0,0),5)。

.

延伸一: 獲取圖片屬性

import cv2
img = cv2.imread('img/image.png')
print img.shape
# (640, 640, 3)
print img.size
# 1228800
print img.dtype
# uint8
# 在debug的時候,dtype很重要

.

延伸二:影象求差值報錯:

__main__:2: RuntimeWarning: overflow encountered in ubyte_scalars

問題分析:ubyte_scalars出現溢位,定位到具體的程式碼:

 val = img[y1_, x1_] - img[y2_, x2_]

這段程式碼的目的是為了計算兩個畫素的差值,img是numpy的ndarray型別,二維陣列中的每個數值型別是uint8,因此兩個uint8型別的數相減,得到的仍是一個uint8,如果被減數小於減數,val的結果也並不會得到負數,而是1,同時輸出這樣一個warning。
解決方法:解決的方法是將uint8轉為int,再相減。

val = int(img[y1_, x1_]) - int(img[y2_, x2_])

.

延伸三:視訊儲存

需要一個存放每幀圖片的資料夾output_dir,需要知道視訊儲存在哪output_video_file,
list_files,先遍歷資料夾中各個圖片

# 引數輸入
output_dir='/home/ubuntu/keras/matt/frcnn/output'
output_path= os.path.join(output_dir, '')                       # 輸入圖片存放位置
output_video_file = '/home/ubuntu/keras/matt/frcnn/output6.avi' # 輸入視訊儲存位置以及視訊名稱
save_to_video(output_video_file,25)                                   

# 函式生成器
def get_file_names(search_path):
    for (dirpath, _, filenames) in os.walk(search_path):
        for filename in filenames:
            yield filename#os.path.join(dirpath, filename)
# yield 把值迭代進去,存進入,然後可以for 迭代出來
# [/home/ubuntu/keras/matt/frcnn/output/]

# 儲存函式
def save_to_video(output_path,output_video_file,frame_rate):
    list_files = sorted(get_file_names(output_path), key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])
    # 拿一張圖片確認寬高
    img0 = cv2.imread(os.path.join(output_path,'0.jpg'))
    height , width , layers =  img0.shape
    # 視訊儲存初始化 VideoWriter
    fourcc = cv2.cv.CV_FOURCC(*'mp4v')
    videowriter = cv2.VideoWriter(output_video_file,fourcc, frame_rate, (width,height))
    # 核心,儲存的東西
    for f in list_files:
        print("saving..." + f)
        img = cv2.imread(os.path.join(output_path, f))
        videowriter.write(img)
    videowriter.release()
    cv2.destroyAllWindows()

其中:fourcc有以下幾種情況:

fourcc = cv2.cv.CV_FOURCC(*'mp4v')
# fourcc = cv2.VideoWriter_fourcc(*'mp4v')
#fourcc = cv2.cv.CV_FOURCC(*'XVID')

延伸四:影象畫框+寫中文+python3讀寫中文

1.python3,中文路徑,讀寫
python3中,路徑中若有中文,比較麻煩,跟一般的讀寫方式不一樣(參考)。

import cv2
from matplotlib import pyplot as plt

# 讀入
img = cv2.imdecode(np.fromfile('..\\1.jpg',dtype = np.uint8),1)

# 寫出
cv2.imwrite("..\\1.jpg",img, [int(cv2.IMWRITE_JPEG_QUALITY), 100] )
cv2.imencode('.jpg', edges)[1].tofile('/../../1.jpg')

其中之前的’.jpg’是代表一種格式,如果是圖片一定得是.png或者.jpg

2.寫文字 + 畫框
(187,176),(241,205)代表左上角,右下角,或者是(x,y)(x+width,y+height)或者另外一種寫法:(left,top)(left+width,top+height),當然還有一些寫法:(x,y,x+w,y+h)
這裡寫圖片描述
這裡得看清楚,x,y的起始位置。(x/left代表橫軸-左起,y/top代表豎軸-上起)

# 畫框
plt.imshow(cv2.rectangle(img,(187,176),(241,205),(0,255,0),3), cmap = 'gray', interpolation = 'bicubic')

# 寫文字
plt.text(187,176, 'words')   # plt的方式
cv2.putText(img,'words',(187,176) ,0, 1,(255,255,255),2)  #cv2的方式
        # 新增文字,1.2表示字型大小,(0,40)是初始的位置,(255,255,255)表示顏色,2表示粗細

以上只能寫英文,中文的話,會出現????
187,176代表左上角的點

# 
import cv2
import freetype as ft2

import freetype
face = freetype.Face("Vera.ttf")


img = cv2.imread('pic/lena.jpg')
line = '你好,我是 lena'

color = (0, 255, 0)  # Green
pos = (3, 3)
text_size = 24

# ft = put_chinese_text('wqy-zenhei.ttc')
ft = ft2.put_chinese_text('msyh.ttf')
image = ft.draw_text(img, pos, line, text_size, color)

之後用ImageDraw可以實現用中文,但是需要載入中文的字型結構。.ttc檔案(參考)。
msyh.ttc是中文簡體字

from matplotlib import pyplot as plt
import matplotlib
from PIL import Image, ImageDraw, ImageFont
# 顯示中文 plt
fnt = "...\\msyh.ttc"
fnt = ImageFont.truetype(fnt, 20)

img = Image.open('..\\1.jpg')
draw = ImageDraw.Draw(img)
draw.rectangle((187,176,241,205), outline=(255, 255, 255, 30))
draw.text((187,176),'你好',(0,0,0), font=fnt)
img.save("..\\t1.jpg")

這裡寫圖片描述

.

延伸五:更精緻的畫框(帶中文)

code起初來源於專案:allanzelener/YAD2K
主要有兩個函式:get_colors_for_classes(num_classes)
draw_boxes(image, boxes, box_classes, class_names, scores=None,fnt ="msyh.ttc" )

其中:get_colors_for_classes(num_classes),輸入個數,就會返回相應的顏色,RGB值:

get_colors_for_classes(2)
>>> [(0, 255, 255), (255, 0, 0)]

那麼draw_boxes函式各個引數的意思為:

  • image:矩陣(width, height, 3)
  • boxes:np.array,(y_min, x_min, y_max, x_max),比如:array([[120, 516,
    221, 714], [306, 753, 363, 847], [148, 14, 222, 78]])
  • box_classes = [1,2,6],這裡是下面的class_names索引,代表本次標註的內容;
  • class_names:[‘a’,’b’,’c’,’d’,’e’,’f’],這裡的class_names指的是全部的標籤名稱,不代表本次,代表全部;
  • scores=None:或者為np.array(['0.1','0.2','0.3'])
  • fnt =”msyh.ttc” ,這個為字型,一般要中文輸入的話,需要指定中文的字型。
import colorsys
import random

import numpy as np
from PIL import Image, ImageDraw, ImageFont


def get_colors_for_classes(num_classes):
    """Return list of random colors for number of classes given."""
    # Use previously generated colors if num_classes is the same.
    if (hasattr(get_colors_for_classes, "colors") and
            len(get_colors_for_classes.colors) == num_classes):
        return get_colors_for_classes.colors

    hsv_tuples = [(x / num_classes, 1., 1.) for x in range(num_classes)]
    colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))
    colors = list(
        map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)),
            colors))
    random.seed(10101)  # Fixed seed for consistent colors across runs.
    random.shuffle(colors)  # Shuffle colors to decorrelate adjacent classes.
    random.seed(None)  # Reset seed to default.
    get_colors_for_classes.colors = colors  # Save colors for future calls.
    return colors


def draw_boxes(image, boxes, box_classes, class_names, scores=None,fnt ="msyh.ttc" ):
    """Draw bounding boxes on image.
    Draw bounding boxes with class name and optional box score on image.
    Args:
        image: An `array` of shape (width, height, 3) with values in [0, 1].
        boxes: An `array` of shape (num_boxes, 4) containing box corners as
            (y_min, x_min, y_max, x_max).
        box_classes: A `list` of indicies into `class_names`.
        class_names: A `list` of `string` class names.
        `scores`: A `list` of scores for each box.
    Returns:
        A copy of `image` modified with given bounding boxes.
    """
    #image = Image.fromarray(np.floor(image * 255 + 0.5).astype('uint8'))
    image = Image.fromarray(image)

    font = ImageFont.truetype(
        font=fnt,
        size=np.floor(3e-2 * image.size[1] + 0.5).astype('int32'))
    thickness = (image.size[0] + image.size[1]) // 300

    colors = get_colors_for_classes(len(class_names))

    for i, c in list(enumerate(box_classes)):
        box_class = class_names[c]
        box = boxes[i]
        if isinstance(scores, np.ndarray):
            score = scores[i]
            label = '{} {:.2f}'.format(box_class, score)
        else:
            label = '{}'.format(box_class)

        draw = ImageDraw.Draw(image)
        label_size = draw.textsize(label, font)

        top, left, bottom, right = box
        top = max(0, np.floor(top + 0.5).astype('int32'))
        left = max(0, np.floor(left + 0.5).astype('int32'))
        bottom = min(image.size[1], np.floor(bottom + 0.5).astype('int32'))
        right = min(image.size[0], np.floor(right + 0.5).astype('int32'))
        print(label, (left, top), (right, bottom))

        if top - label_size[1] >= 0:
            text_origin = np.array([left, top - label_size[1]])
        else:
            text_origin = np.array([left, top + 1])

        # My kingdom for a good redistributable image drawing library.
        for i in range(thickness):
            draw.rectangle(
                [left + i, top + i, right - i, bottom - i], outline=colors[c])
        draw.rectangle(
            [tuple(text_origin), tuple(text_origin + label_size)],
            fill=colors[c])
        draw.text(text_origin, label, fill=(0, 0, 0), font=font)
        del draw

    return np.array(image)

相關推薦

opencv圖片視訊顯示基本繪圖函式介紹

本文來自於段力輝 譯《OpenCV-Python 中文教程》 一、圖片 + 讀入、顯示、寫出 opencv中讀入、顯示、寫出圖片:cv2.imread(), cv2.imshow(), cv2.imwrite() 1、cv2.imread(

opencv學習(1)——顯示一幅圖片

window7 64位 +vs2013+opencv3.0.0 #include<opencv2/opencv.hpp> using namespace cv; int main(int argc,char*argv[]) { Mat

3DS文件在菠菜網站開發OpenGL的顯示

了解 通過 triangle ref 3ds angle 根據 思想 子節點 學習菠菜網站開發 dsluntan.com VX:17061863513了Blender之後,很想將自己設計的模型載入自己編寫的程序中,因此考慮了比較常見的3DS文件格式。這回嘗試著將3DS文

信息學競賽中的比較其他方法

信息 32位系統 cin def 時間 fread tdi fine with 目錄 註意事項 輸入輸出時間測試 註意事項 讀入註意這幾點 如果關閉同步:ios::sync_with_stdio(false) 那麽cin和scanf不能混用. 不同系統下的longl

卡常神器——register 快速輸出

可能 () amp 很多 服務 char 讀取 get 裏的 快速讀入模板 int read() { int s = 0, w = 1; char ch = getchar(); //getchar() 一次從鍵盤讀入一個字符 while (ch &

學習opencv專案從攝像機資料

很有意思,學習open從v上面的一些程式的程式碼不全,今天的從攝像機讀入資料就寫了半截從部落格上扒了人家的程式碼 連結http://blog.sina.com.cn/s/blog_6dbe9bdb0100nii7.html 看到了cvCaptureFromCAM cvCre

mac下安裝包已損壞顯示未激活打開崩潰處理方法

允許 erl under 終端 顯示 復制粘貼 ali tex 密碼 mac安裝app出現安裝包已損壞、顯示未激活、打開崩潰等的提示 步驟1:Spotlight搜索(快捷鍵:command+空格或右上角搜索的符號):搜索 “終端” 步驟2:直接復制粘貼 sudo spctl

5. 資料庫題(以個人熟悉資料庫為準按要求寫出sql) (1) 計算每個人的總成績並排名(要求顯示欄位:學號,姓名,總成績) (2) 計算每個人單科的最高成績(要求顯示欄位: 學號,姓名,課程,最

5. 資料庫題(以個人熟悉資料庫為準、按要求寫出sql) (1) 計算每個人的總成績並排名(要求顯示欄位:學號,姓名,總成績) (2) 計算每個人單科的最高成績(要求顯示欄位: 學號,姓名,課程,最高成

渡鴉幣-RVN,AA礦池挖礦顯示卡挖礦RVN挖礦軟體及錢包地址初學教程

渡鴉幣RVN採用X16R演算法,支援A卡和N卡挖礦。 RVN挖礦軟體T-Rex0.7.0版本更新,為CUDA 10和最新的Nvidia GPU架構提供更多的新能改進。新版本T-Rex 0.7.0帶有CUDA 10二進位制檔案,支援Nvidia Volta(Ti

一系列整數,統計正整數個數及負整數個數,0就結束

#include<iostream> using namespace  std; int main() {int a=0;int i=0,j=0;cin>>a;while(a!

opencv學習之四十四】影象金字塔

在opencv中影象有時候過大導致進行操作時候資訊量過大,耗時較長,一般可以將影象壓縮,然後根據進行初步資訊搜尋,減少搜尋範圍,然後定位可能搜尋區域進行再次分析。opencv有對影象進行放大(向上取樣)和縮小(向下取樣)兩個函式PyrUp()和PyrDown(),可以直接操作

MySQL入門--建立資料庫顯示警告資訊顯示資料庫顯示資料庫建立資訊指定字元編碼集

1、建立資料庫: CREATE DATABASE t1;  同一條語句不能寫兩次,也就是不能建立,否則會提示錯誤警告 2、顯示警告資訊: SHOW WARNINGS; 3、顯示所有的

使用openslide-python對whole slide image(WSI)進行讀取顯示和金字塔構建生成tiles

H&E染色的病理切片怎麼讀取 特點是:太大,每張600Mb~10Gb,一般軟體打不開。 基於python開發,暫時想到3種開啟方式: #coding:utf-8 import openslide import matplotlib.pyplot as

Node.js -- Stream 使用小例 ( 流運用 :讀取寫入拷貝)

Stream 是一個抽象介面,Node 中有很多物件實現了這個介面。例如,對http 伺服器發起請求的request 物件就是一個 Stream,還有stdout(標準輸出)。 Node.js,Str

OpenCv學習筆記(七)---OpenCv中的基本繪圖函式,圓,橢圓,線段,矩形,多邊形的繪製(1)

(一)本節教程的目的 本節你將學到: 1--如何使用Point在影象中定義2D點 2--如何以及為何使用Scalar 3--用OpenCv的函式Line繪直線 4--用OpenCvd的函式ellipse繪製橢圓 5--用OpenCv的函式rectangle繪矩形

如何高效C++(模板泛型程式設計)

對Effective C++讀了以後的總結(暑假沒事幹。。就是看書,從後往前的總結) 41。瞭解隱式介面和編譯器多型 隱式介面:由一組有效表示式構成,表示式要求了相應的約束條件。 顯式介面:則是在原始碼中明確可見的指出介面的約束條件(比如函式引數的型別)。 所謂的編譯期多

openCV基本繪圖函式----畫直線函式cvLine

#include<iostream>  #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>  using namespace cv;   int

opencv 基本繪圖函式總結

#include "opencv2/calib3d/calib3d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namesp

opencv基本繪圖函式--點,線,矩形,圓等

opencv提供的一些繪圖函式,來簡單的繪製一個簡易的圖形,包括線段、矩形、橢圓、多邊形等。 1.線段 opencv提供了line()函式來對直線的繪製。其原型如下: CV_EXPORTS_W void line(CV_IN_OUT Mat& img, Point

OpenCV例程之基本影象顯示

OpenCV是Intel®開源計算機視覺庫。它由一系列 C 函式和少量 C++ 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。 1.  OpenCV與數字影象 在使用OpenCV做視覺或數字影象預處理時,需要讀入相機採集來的影象或視訊資訊。影象資料的獲取主要有以下