Python: OpenCV: resize image by width

6 07 2014

resize big image by width for example there are 5400×2700 pixels and want to display by 1000 pixel width. try this
import cv2
filename = 'bigimage.jpg'
W = 1000.
oriimg = cv2.imread(filename,cv2.CV_LOAD_IMAGE_COLOR)
height, width, depth = oriimg.shape
imgScale = W/width
newX,newY = oriimg.shape[1]*imgScale, oriimg.shape[0]*imgScale
newimg = cv2.resize(oriimg,(int(newX),int(newY)))
cv2.imshow("Show by CV2",newimg)
cv2.waitKey(0)

if image has width less than 1000 it will be enlarge image.

Advertisements




Python: OpenCV: Plot points on image

4 09 2013

Python: OpenCV: Plot points on image

20130904

use cv2 to plot points on image
point symbol like control point symbol

การพล๊อตข้อมูลจุดลงไปบนภาพ โดยกำหนดลักษณะของจุดเป็นแบบรูปจุดควบคุม

code:

import cv2
 if __name__ == '__main__':
 image067="""
    1,2725.816,1578.254
    2,2339.446,1381.908
    3,2263.594,1318.698
    4,2261.619,1222.698
    6,1941.855,1376.561
    7,1941.188,1288.783
    ...
    68,2357.619,1264.970
    """
 imageFile = r'ladybug067.jpg'
 imagePointList = data2List(image067)
 OriImage = cv2.imread(imageFile)

## plot point on image
 for i in imagePointList:
   pid,cx,cy = i
   cv2.circle(OriImage,(int(cx),int(cy)),10,(255,255,255),-11)
   cv2.circle(OriImage,(int(cx),int(cy)),11,(0,0,255),1) # draw circle
   cv2.ellipse(OriImage, (int(cx),int(cy)), (10,10), 0, 0, 90,(0,0,255),-1 )
   cv2.ellipse(OriImage, (int(cx),int(cy)), (10,10), 0, 180, 270,(0,0,255),-1 )
   cv2.circle(OriImage,(int(cx),int(cy)),1,(0,255,0),1) # draw center
   cv2.putText(OriImage,pid,(int(cx)+10,int(cy)-10),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(255,180,180))
 print 'plot points completed'
 outputfile = 'PlotPoint'+imageFile
 cv2.imwrite(outputfile,OriImage)

รูปร่างของจุดที่ได้

the symbol will like this cp





Python: pyQt: set MessageBox default button

8 03 2013

20130308

I use MessageBox in pyQt and want to change default button from Yes to No, let see how to do.

first I want to show the basic command to show message box

from PyQt4 import QtGui
reply = QtGui.QMessageBox.question(None,'Warning!!','Click [Yes] to do or [No] to skip',QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
 if reply == QtGui.QMessageBox.Yes:
      print 'Yes'
 else:
      print 'No'

output show in image the default button is highlight on Yes button

Image

when we want to change default from Yes to No button we can do like this

from PyQt4 import QtGui
reply = QtGui.QMessageBox.question(None,'Warning!!','Click [Yes] to do or [No] to skip',QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
     print 'Yes'
else:
     print 'No'

the “QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No” is key point first two are what button to show, this word meas show Yes and No button and after comma is what default button now I set No button and the result is
Image





Python: How to skip / break in for loop

21 01 2013

20130121

For loop in python working like this

for i in range(10):
   print i

output will be

0
1
2
3
4
5
6
7
8
9

if you want to exit loop when condition is true (when i = 5)

for i in range(10):
   if i == 5:
      break
   print i

output will be

0
1
2
3
4

if you want skip when condition is true (when i = 5) but you still want it continue loop

for i in range(10):
   if i == 5:
      continue
   print i

output will be

0
1
2
3
4
6
7
8
9




Python: install GDAL with Python 2.7 on Windows 7 64 bit

14 01 2013

20130114

It’s easy to install GDAL library for Python on Windows 7 64 bit

การติดตั้ง GDAL สำหรับ Python บนระบบปฎิบัติการ Windows 7  64 bit เดิมเคยคิดว่ายุ่งยากกลับไม่เป็นเช่นนั้น ติดตั้งได้ง่ายมากเลย

required: (dowload มาได้เลย)

  1. Python 2.7.3 for windows 64 bit [download link][download page]
  2. GDAL-1.9.2.windows 64bit for Python 2.7 [download link]

เมื่อโหลดมาครบแล้วก็เริ่มกันได้เลย

  • install Python 2.7 [if you already installed pass this ^_^]
  • install GDAL 1.9.2

เรียบร้อย ไม่ต้องตั้งค่าอื่นเห็นไหมง่ายมากเลยเทียบกับของเดิม

test: มาทดสอบกันว่าใช้งานได้หรือเปล่า

เปิด Python Shell หรือ Python Interpreter ขึ้นมา
พิมพ์ from osgeo import gdal ถ้าสามารถโหลดเข้ามาได้จะแสดงพร้อมสำหรับรับคำสั่งต่อไป
พิมพ์ dir(gdal) ถ้าสมบูรณ์ก็จะแสดงคำสั่งต่างๆ ออกมาดังภาพ
Image

พร้อมใช้งานแล้ว





Python: read text file into list

24 12 2012

20121224

text file contain data of 15 ground point. file name is grounddata.txt

 15
 1 18160.153 -57509.869 1284.700 0.2 0.2 0.1
 2 24207.094 -54489.362 1341.192 0.2 0.2 0.1
 3 27248.245 -51442.223 824.272 0.2 0.2 0.1
 4 21195.711 -51470.131 946.992 0.2 0.2 0.1
 5 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 6 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 7 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 8 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 9 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 10 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 11 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 12 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 13 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 14 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0
 15 24000.0 -54000.0 1000.0 1000.0 1000.0 1000.0

the first line is number of points.
second line to end is point number, X, Y, Z, SDX,SDY,SDZ

I need to read text file and convert data from text to number and add them to list in Python.
I use this code

def num(s):
  try:
     return int(s)
  except ValueError:
     return float(s)
if __name__ == '__main__':
   filemane = 'grounddataTom.txt'
   with open(filemane,'r') as f:
     i = 0
     groundPointList = []
     for line in f:
       if i == 0:
         groundPoint = int(line)
       else:
         lineTxt = line.split()
         lineNum = []
           for j in lineTxt:
             lineNum.append(num(j))
           groundPointList.append(lineNum)
       i +=1
  print groundPoint
  print groundPointList

it work very well





Python: get variable value from text

14 12 2012

20121214

มีตัวแปรที่เก็บไว้แบบเรียงหมายเลข ต้องการระบุเฉพาะหมายเลขแล้วเข้าไปเรียกตัวแปรได้ถูกตัว

code:

frame098Data = [1,a,2,b,3,]
frame101Data = [2,d,e,f,g,]
frame104Data = [3,q,2,p,1,]

input ="098"
dataname ="frame"+input+"Data"

print dataname

จะได้ >”frame098Data”
แต่หากเราใช้ฟังก์ชั่น eval()

print eval(dataname)

จะได้ >[1,a,2,b,3,]