2012/07/29

OpenCV

,
OpenCV 2.4、はじめました。冷やしOpenCV2.4。
いやあ、えっちな画像を試験台にすると捗りますね!!!!!!!!

・インストール
どうもインストール方法調べると、バージョンが2.0くらいまではインストーラーがあったらしく、インストール→CMakeだったらしいですね。しかし、現行の2.4だと、解凍してそれでいいという状況だそうで。
ここが参考になりました: OpenCV2.4の入手、ダウンロード、インストール、環境設定 | イメージングソリューション http://imagingsolution.net/program/opencv/opencv2-4-dynamic-downlaod-install/

Self-Extractingって一時展開先だと思ってて3回入れなおしました(真顔)
opencv/build/x86/vc9/libと、opencv/build/x86/vc9/staticlibってあるけど違いがわかりませんね~~~~~~


#pragma comment(lib, "...")とかでopencvの静的ライブラリを読み込みます。
コード簡単なのでいいですね。
参考:http://opencv.jp/cookbook/opencv_img.html#
#include < opencv2/opencv.hpp >

#ifdef _DEBUG
#pragma comment(lib, "opencv_core242d.lib")
#pragma comment(lib, "opencv_imgproc242d.lib")
#pragma comment(lib, "opencv_highgui242d.lib")
#pragma comment(lib, "opencv_objdetect242d.lib")
#else 
#pragma comment(lib, "opencv_core240.lib")
#pragma comment(lib, "opencv_imgproc240.lib")
#pragma comment(lib, "opencv_highgui240.lib")
#pragma comment(lib, "opencv_objdetect240.lib")
#endif

int main()
{
 cv::Mat img1 = cv::imread("******.jpg", CV_LOAD_IMAGE_GRAYSCALE);
 if(img1.empty())
  return -1;

 //閾値
 //cv::Mat tozero_img;
 //cv::threshold(img1, tozero_img, 0, 255, cv::THRESH_TOZERO | cv::THRESH_OTSU);

 //エッジ画像(Canny)
 cv::Mat canny_img;
 cv::Canny(img1, canny_img, 50, 200);

 cv::namedWindow("image");
 cv::imshow("image", canny_img);
 cv::waitKey(0);

 return 0;
}

Q. Assertion failed (src.type() == CV_8UC1 ) in unknown function,とか出ます!!!
A. 閾値とかエッジ画像の時は、cv::imreadの第2引数をCV_LOAD_IMAGE_GRAYSCALE( == 0)にしてグレースケールとして画像を読み込まないといけないらしい( http://stackoverflow.com/questions/7680816/opencv-error-when-using-function-cvgoodfeaturestotrack )

参考: OpenCVを用いた特徴点対応付け ≪ Miyabiarts.net http://miyabiarts.wordpress.com/2011/01/21/opencvを用いた特徴点対応付け/

Read more →

2012/07/17

twitteroauth

,
実装するのはクソ めんどくさい 今回は特にギルティ

Q. twitteroauth使ったら"Call to undefined function curl_init()"とかでる

A. php.iniでphp_curl.dllを読みこませるようにしよう。

Q. php.iniに"extension=php_curl.dll"って書いたらApacheが起動できなくなった
具体的にはphp.iniを編集し保存→ApacheをApache MonitorでRestartさせようとする→動作を停止しました。ってなる。extension_dirにphp_curl.dllは存在している

A. php_curl.dllは内部で4つdllを呼び出します。それがたりないのかもしれません。参考:http://blogs.yahoo.co.jp/gun534/50813289.html
dllはSystem32の中にあるかどうか。俺のはwldap32.dll以外なかった。で、調達してくるわけですが、ssleay32.dllとlibeay32.dllはc:/phpにある。
zlib.dllはここのzlib125dll.zipをDL→回答→zlibwapi.dllをzlib.dllに名前変更、で用意する。(参考:http://www.rubylife.jp/railsinstall/rubygems/index3.html)

マジこのサイト見つけるまでにどれだけ時間のかかったことか…はあ…

Q. Twitter ApplicationのSettingsでAccess levelはRead and Writeなのに、POSTしようとすると"Read-only application cannot POST"というエラーが返ってきてポスト出来ない

A. アプリ消せ らしい
Recreate access tokenした記憶ないからRead-onlyのtoken使ってる気がしなくもない。どうなんだろう。

Q. Services_Twitterだとどうやって認証画面呼び出すんだっけ

A. twitteroauth使え
解決策がこれしかわかりませんでした!!!!!!!
twitteroauthもあまり使ったことないので、最初http://blog.unfindable.net/archives/4078を参考にしました。でもって結局http://nianote.com/programing/101をほぼコピペしました。なんか後者のほうが、うん、まあ()

Q. twitteroauthでgetRequestToken($callbackuri)すると"Undefined index: oauth_token in"とかWarningでる

A. ただgetRequestToken()しませう。引数あるとWarning帰ってくるねんけどなんでやろ

結局コードこんなんなりました、参考程度にどうぞ
auth.php

getRequestToken();
 
$authUrl = $twitter->getAuthorizeURL($request_token, true);

$_SESSION["token"] = $request_token;
?>
Read more →

2012/07/14

dsPIC33FJ32GP202

,
久々に弄ることにした(暇だった)。とりあえずPICKit2の踏んづけて折ったUSBコネクタを付け直すところからだった…

UART、つまりシリアルがまともに動いてくれなくて困ってるわけです。
datasheet:http://ww1.microchip.com/downloads/jp/DeviceDoc/jp531358.pdf
UARTのマニュアル(日本語):http://ww1.microchip.com/downloads/jp/DeviceDoc/70188D_JP.pdf
ここに書いてあるように、UxMODE、UxSTAレジスタで設定して、UxBRGにボーレートを設定して関数呼ぶわけです、が、まあ動くはずもなく…
実際にはC30を用いて、なんかよくわからないコンフィグのパラメータ並べるわけです、回折はここが詳しめ:http://www.crystal-creation.com/robot/technical-information/microcomputer/pic/programming/built-in-module/uart/

(dsPIC33FJ32FP202) - FT232(秋月モジュール) -USB- PCみたいな構成だけど、オシロで見る分にはFT232のRXポートまではちゃんと来てるみたい…?
PC側の問題(ドライバ、ポート、後はTeraTermとか)なのか、FT232の問題(ピンが違うor電圧設定が違う)なのかようわからん…

UM232RのRXDピンの波形





#include < p33FJ32GP202.h >
#include < uart.h >

_FOSCSEL(FNOSC_PRI & IESO_OFF);
_FOSC(POSCMD_HS & OSCIOFNC_OFF & IOL1WAY_OFF);
_FWDT(FWDTEN_OFF & WINDIS_OFF);
_FPOR(FPWRT_PWR1 & ALTI2C_OFF);
_FICD(JTAGEN_ON & ICS_PGD1);

//UARTの設定
//IDLE_ONE? 
unsigned int U1MODE_value = UART_EN & UART_IDLE_CON & UART_IrDA_DISABLE &
       UART_MODE_SIMPLEX & UART_UEN_00 & UART_EN_WAKE &
       UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_UXRX_IDLE_ONE &
       UART_BRGH_SIXTEEN & UART_NO_PAR_8BIT & UART_1STOPBIT;
unsigned int U1STA_value = UART_INT_TX_BUF_EMPTY & UART_SYNC_BREAK_DISABLED &
       UART_TX_ENABLE & UART_INT_RX_CHAR & 
       UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
const unsigned int CLOCK_FREQUENCY = 7370000;
const unsigned int BAUDRATE = 9600;

int main()
{
 CLKDIV = 0; //set 1:1
 //AD1PCFGL = 0xFFFF; //portA -> all digital
 TRISA = 0x0000; //all out
 PORTA = 0x0001; //RA0 -> high
 TRISB = 0x0010; //RB4(RP4)はinput
 //UART1ピンの割り当て
 RPINR18bits.U1RXR = 2;//RXはRP2, RB2 6pin
 RPOR2bits.RP4R = 3; //TXはRP4(RB4)
 //UART1初期設定
 //ボーレートの計算
 const double BaudRateF = ((double)CLOCK_FREQUENCY / (16*BAUDRATE)) - 1;
 const unsigned int baud = (unsigned int)(BaudRateF + 0.5);
 //9600bps、パリティ無し8bit、フロー制御なし
 OpenUART1(U1MODE_value, U1STA_value, baud);
 
 volatile int j = 0;
 while(1)
 {
  //文字を送る
  WriteUART1('k');
  j++;
 }
 return 0;
}
Read more →

2012/07/11

[プログラミング]iTextSharpでpdfを操作する

,
pdfはめんどくさい pdfはしねばいい pdfは云々、とpdfに関する恨みを並べても、結局使わないといけないのは変わらないので…諦めて向き合います

http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SamplePdfSplit.html
http://jp.techerald.com/page/imagen-itextsharp-mantener-las-dimensiones-en-pixeles.html
http://stackoverflow.com/questions/4932187/itextsharp-scaling-image-to-be-full-page
http://yonaizumi.dip.jp/weblog/cappe/2010/11/ctiffpdf.html
http://sourceforge.net/projects/itextsharp/

参照の設定は、dllをどっかに保存しといて、参照の追加→参照→dllを指定
コンパイルすると、なんか自動的に/Debug、/Release に配置される???

なんか、AbsolutePositionって左下が(0,0)なのかな。直さなきゃ

コード(適当)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
//iTextSharp
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace jpg2pdf
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        //jpgファイルを開く
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.FileName = "default.jpg";
            ofd.InitialDirectory = "";
            ofd.Filter = "jpgファイル(*.jpg)|*.jpg|すべてのファイル(*.*)|*.*";
            ofd.FilterIndex = 1;
            ofd.Title = "開くファイルを選択してください";
            ofd.RestoreDirectory = true;
            ofd.CheckFileExists = true;
            ofd.CheckPathExists = true;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var sfd = new SaveFileDialog();

            sfd.FileName = "無題.pdf";
            sfd.InitialDirectory = "";
            sfd.Filter = "pdfファイル(*.pdf)|*.pdf|すべてのファイル(*.*)|*.*";
            sfd.FilterIndex = 1;
            sfd.Title = "保存先を指定してください";
            sfd.RestoreDirectory = true;
            sfd.OverwritePrompt = true;
            sfd.CheckPathExists = true;

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                textBox2.Text = sfd.FileName;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            var doc = new Document();
            //pdf保存先
            PdfWriter.GetInstance(doc, new FileStream(textBox2.Text, FileMode.Create));
            //pdfを開く
            doc.Open();
            //画像データを取得
            var image = iTextSharp.text.Image.GetInstance(textBox1.Text);
            doc.SetPageSize(PageSize.A4);
            //サイズのフィット
            image.ScaleToFit(doc.PageSize.Width, doc.PageSize.Height);
            //画像の配置箇所設定
            image.SetAbsolutePosition(0f, 0f);
            //用紙サイズの設定
            //doc.SetPageSize(new iTextSharp.text.Rectangle(image.PlainWidth, image.PlainHeight));
            //書き込み
            doc.Add(image);
            //pdfを閉じる
            doc.Close();
            //完了のダイアログ(無いと終わったかわからない)
            MessageBox.Show("変換が完了しました");
        }

    }
}

Read more →

2012/07/06

[電子工作]dsPICについて 1

,
dsPICに逃げたマン

FFTの参考→http://www.picfun.com/dspprogframe.html

Q. libdsp-elf.a libdsp-coff.a どっちだよ

A. libdsp-coff.aかしら。こっちでBUILDは通った。参考: http://digitalfilter.com/products/dfdspic804/jikken/jikken02.html

COFFがデフォルト、libdsp.aが泣く環境変数もコマンドラインoptionもない場合、libdsp-coff.aが使われます http://ww1.microchip.com/downloads/en/DeviceDoc/DS51456C_JP.pdf

Q. リンカースクリプト(Linker Script, .gld)どこー?

A. 俺のは/MPLAB C30/support/dsPIC33F/gld

Q. 上の参考先だとdsp.hが""だけど<>でいいの?ていうかどこ

A. 俺のは良かった。俺のは。adc10.hはどこ…
→dsPIC33F系統の場合、adc.hになります(参考:http://www.crystal-creation.com/robot/technical-information/microcomputer/pic/programming/built-in-module/adc/)。というかdsPIC33FJ32GP202はADC10bitじゃなくて12bitだったからしぬね。

Q. flactionalがエラーです><

A. f"r"actionalです!!!!!! これやって頭抱えた

Q. 'for' loop initial declaration used outside C99 mode
A.

Q. どうでもいいけど、参考先だとMAX_SIZE=128だけど、dsPIC33FJ32GP202はメモリ確保できません的エラー返ってくるから、MAX_SIZE=64じゃないと動かない

眠いから終わり
Read more →