[Python]使用OpenCV实现伪彩色和热力图
使用applyColorMap可以对单个通道的图像进行伪彩色处理和热力图
OpenCV的定义了12种colormap常数,选择一个需要的即可
cv2.applyColorMap(heatmap_g, cv2.COLORMAP_JET)
图像可以使用addWeighted进行叠加处理
cv2.addWeighted(heatmap_img, alpha, merge_img, 1-alpha, 0, merge_img) # 将热度图覆盖到原图
def heatmap_overlay(image,heatmap): # 灰度化heatmap heatmap_g = heatmap.astype(np.uint8) # 热力图伪彩色 heatmap_color = cv2.applyColorMap(heatmap_g, cv2.COLORMAP_JET) # overlay热力图 merge_img = image.copy() heatmap_img = heatmap_color.copy() overlay = image.copy() alpha = 0.25 # 设置覆盖图片的透明度 #cv2.rectangle(overlay, (0, 0), (merge_img.shape[1], merge_img.shape[0]), (0, 0, 0), -1) # 设置蓝色为热度图基本色 cv2.addWeighted(overlay, alpha, merge_img, 1-alpha, 0, merge_img) # 将背景热度图覆盖到原图 cv2.addWeighted(heatmap_img, alpha, merge_img, 1-alpha, 0, merge_img) # 将热度图覆盖到原图 return merge_img |
参考:
https://blog.csdn.net/u013381011/article/details/78341861
[Python]使用OpenCV实现图像和视频转换操作
将视频按FPS拆解成单张图片
使用cv2.VideoCapture
cv2.VideoCapture(video_path)
计算FPS使用,注意部分压缩视频FPS存在丢帧情况,需要进行跳帧处理
fps = int(vidcap.get(cv2.CAP_PROP_FPS))
def video_split(): video_path = 'test/video/video_01.mp4' video_name = video_path[:-4] vidcap = cv2.VideoCapture(video_path) success,image = vidcap.read() fps = int(vidcap.get(cv2.CAP_PROP_FPS)) count = 0 while success: image = image_process(image) cv2.imwrite("%s/%d.jpg" % (video_name, count), image) #if count % fps == 0: # cv2.imwrite("%s/%d.jpg" % (video_name, int(count / fps)), image) print('Process %dth seconds: ' % int(count / fps), success) success,image = vidcap.read() count += 1 |
[Python]使用OpenCV进行轮廓检索
对遮罩层进行轮廓检索并合并到图像上
第一步使用高斯模糊GaussianBlur模糊边缘像素
第二步使用Canny侦测边界,丢弃部分散点
最后使用findContours找到外框
#对遮罩层进行轮廓检索并合并到图像上 def drawMaskContoursOverImage(image,mask): # convert colorspace gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY) #image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR) # 3*3 GaussianBlur # gray = cv2.GaussianBlur(gray, (3, 3), 0) # canny detect edge gray = cv2.Canny(gray, 100, 300) ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # binary是最后返回的二值图像 #findContours()第一个参数是源图像、第二个参数是轮廓检索模式,第三个参数是轮廓逼近方法 #输出是轮廓和层次结构,轮廓是图像中所有轮廓的python列表,每个单独的轮廓是对象边界点的(x,y)坐标的Numpy数组 binary, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(image, contours, -1, (0, 255, 0), 1) # 写图像 cv2.imwrite('%s.masked.png'%pair[0],image,[int(cv2.IMWRITE_PNG_COMPRESSION),3]) |
参考
https://blog.csdn.net/dz4543/article/details/80655067
PostgreSQL使用PL/SQL和游标实现按日期批量执行
现有的DWH系统的是按天创建数据表的,使得定期维护变得麻烦,例如每个月底需要将按当月产生的临时表archive。
方式1.批量生成SQL,按固定的日期值生成一堆SQL,SQL生成方法多样。但是需要确认全部sql是否正确。
方式2.编写PL/SQL function,使用游标方式批量执行。
DROP FUNCTION fun_datecursor(from_date text,to_date text,cond text); CREATE OR REPLACE FUNCTION fun_datecursor(from_date text,to_date text,cond text) RETURNS text AS $ DECLARE cur_date refcursor; buffer text := ''; var_day DATE; BEGIN OPEN cur_date FOR EXECUTE 'SELECT generate_series('''|| from_date ||'''::date,'''|| to_date ||'''::date,'''|| cond ||''')'; loop --开始循环 fetch cur_date INTO var_day; --将游标指定的值赋值给变量 IF found THEN --------------------------------------- --任意的逻辑,或调用其他function --------------------------------------- buffer:= buffer || to_char(var_day,'yyyyMMdd'); ELSE exit; END IF; END loop; --结束循环 close cur_date; --关闭游标 RETURN buffer; END $ LANGUAGE plpgsql; |
执行function
SELECT fun_datecursor('2008-03-01','2008-03-31','1 day’); |
PostgreSQL创建ReadOnly只读用户
PostgreSQL可以通过schema和table级别对数据表进行只读控制
一般会使用PostgreSQL创建只读用户,然后给予相应的只读权限方式实现
通过使用
-- 创建readonly_user用户,密码为readonly_password CREATE USER readonly_user WITH encrypted password 'readonly_password'; -- 设置readonly_user用户为只读事务 ALTER USER readonly_user SET default_transaction_read_only=ON; -- 授予usage权限给到readonly_user用户 GRANT usage ON schema "public" TO readonly_user; -- 将默认"public"schema下新建表的读取权限授予给readonly_user ALTER DEFAULT privileges IN schema "public" GRANT SELECT ON TABLES TO readonly_user; -- 授予select权限给到readonly_user用户 GRANT SELECT ON ALL TABLES IN schema "public" TO readonly_user; GRANT SELECT ON ALL sequences IN schema "public" TO readonly_user; -- 允许readonly_user用户连接到指定数据库 GRANT CONNECT ON DATABASE splrp_dev TO readonly_user; |
注意:
已有的数据表进行readonly设置,可以通过
-- 授予usage权限给到readonly_user用户 GRANT usage ON schema "public" TO readonly_user; -- 授予select权限给到readonly_user用户 GRANT SELECT ON ALL TABLES IN schema "public" TO readonly_user; GRANT SELECT ON ALL sequences IN schema "public" TO readonly_user; |
对于将来创建的新表,则需要通过
-- 将默认"public"schema下新建表的读取权限授予给readonly_user ALTER DEFAULT privileges IN schema "public" GRANT SELECT ON TABLES TO readonly_user; |
可以讲以后创建的table也赋予readonly_user只读权限。
[VBA]Base64编码和Base64解码
VBA实现Base64编码和Base64解码,用于处理加密的URL非常方便。
VBA Base64 编码/加密函数:
'VBA Base64 编码/加密函数: Function Base64Encode(StrA As String) As String 'Base64 编码 On Error GoTo over '排错 Dim buf() As Byte, length As Long, mods As Long Dim Str() As Byte Dim i, kk As Integer kk = Len(StrA) - 1 ReDim Str(kk) For i = 0 To kk Str(i) = Asc(Mid(StrA, i + 1, 1)) Next i Const B64_CHAR_DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" mods = (UBound(Str) + 1) Mod 3 '除以3的余数 length = UBound(Str) + 1 - mods ReDim buf(length / 3 * 4 + IIf(mods <> 0, 4, 0) - 1) For i = 0 To length - 1 Step 3 buf(i / 3 * 4) = (Str(i) And &HFC) / &H4 buf(i / 3 * 4 + 1) = (Str(i) And &H3) * &H10 + (Str(i + 1) And &HF0) / &H10 buf(i / 3 * 4 + 2) = (Str(i + 1) And &HF) * &H4 + (Str(i + 2) And &HC0) / &H40 buf(i / 3 * 4 + 3) = Str(i + 2) And &H3F Next If mods = 1 Then buf(length / 3 * 4) = (Str(length) And &HFC) / &H4 buf(length / 3 * 4 + 1) = (Str(length) And &H3) * &H10 buf(length / 3 * 4 + 2) = 64 buf(length / 3 * 4 + 3) = 64 ElseIf mods = 2 Then buf(length / 3 * 4) = (Str(length) And &HFC) / &H4 buf(length / 3 * 4 + 1) = (Str(length) And &H3) * &H10 + (Str(length + 1) And &HF0) / &H10 buf(length / 3 * 4 + 2) = (Str(length + 1) And &HF) * &H4 buf(length / 3 * 4 + 3) = 64 End If For i = 0 To UBound(buf) Base64Encode = Base64Encode + Mid(B64_CHAR_DICT, buf(i) + 1, 1) Next over: End Function |
解决Python Error ‘TSaslClientTransport’ object has no attribute ‘trans’
解决Python Error ‘TSaslClientTransport’ object has no attribute ‘trans’
原因应该是thrift和impyla包版本的问题
sudo pip uninstall thrift sudo pip uninstall impyla sudo pip install thrift==0.9.3 sudo pip install impyla==0.13.8 |
参考
http://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Python-Error-TSaslClientTransport-object-has-no-attribute/m-p/58033
Recent Comments