PowerPointの数式をTeXで書けるWebアプリケーション。
今日知りました。これはいいかも。
Visual StudioのエディタをViライクに変更するっていうやつ。
http://www.viemu.com/
今日知りました。
すごいなぁ。めっちゃ欲しい。約1万円かぁ・・・
ユーザーの方から、 rootwater.vimの"CursorColumn"の設定がされていないというご指摘を頂いたので以下のカラースキームを修正しました。
ちなみに"CursorColumn"はカレント列のハイライト色の設定です。Vim7.0以降であれば、
:set cursorcolumn
とすることで、カレント列をハイライトすることができます。
これは OpenCV 超初心者である私のメモです.
間違っている可能性がありますので注意してください.
cvNot 関数を使用すると画像配列の各要素のビットをすべて反転することができる. これを利用すると画像のネガポシ反転を行うことができる.
OpenCV を使用して, 画像を読み込み, ネガポシ反転して表示するサンプルコードを以下に示す.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
/* main */
int main(void) {
IplImage *image;
/* 静止画像を読み込む */
image = cvLoadImage("dede.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(image == NULL){
fprintf(stderr, "読み込み失敗");
return EXIT_FAILURE;
}
/* 配列の各要素のビットをすべて反転する */
cvNot(image, image);
/* ウインドウを準備して画像を表示する */
cvNamedWindow("NegaPosi",CV_WINDOW_AUTOSIZE);
cvShowImage("NegaPosi",image);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&image);
/* ウィンドウを破棄する */
cvDestroyWindow("NegaPosi");
return EXIT_SUCCESS;
}
実行結果
実行結果は以下のようになる.
これは OpenCV 超初心者である私のメモです.
間違っている可能性がありますので注意してください.
OpenCV を使用して, 画像を読み込み, 2値化して表示するサンプルコードを以下に示す.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
/* main */
int main(void) {
IplImage* source;
IplImage* binary;
int threshold = 128;
int max_value = 255;
/* 静止画像をグレースケールとして読み込む */
source = cvLoadImage("dede.jpg",CV_LOAD_IMAGE_GRAYSCALE);
if (source == NULL) {
fprintf(stderr, "読込みに失敗しました.");
return EXIT_FAILURE;
}
/* 2値画像用の領域を確保 */
binary = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U,1);
/* グレースケールから2値画像に変換 */
cvThreshold(source,binary,threshold,max_value,CV_THRESH_BINARY);
/* ウインドウを準備して画像を表示する */
cvNamedWindow("Binarization",CV_WINDOW_AUTOSIZE);
cvShowImage("Binarization",binary);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&source);
cvReleaseImage(&binary);
/* ウィンドウを破棄する */
cvDestroyWindow("Binarization");
return EXIT_SUCCESS;
}
実行結果
実行結果は以下のようになる.
これは OpenCV 超初心者である私のメモです.
間違っている可能性がありますので注意してください.
OpenCV を使用して, 画像を読み込み, グレースケール表示するサンプルコードを以下に示す.
方法1
cvLoadImage 関数で画像を読み込む際に, フラグにCV_LOAD_IMAGE_GRAYSCALEを指定する.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
/* main */
int main(void) {
IplImage* image;
/* 静止画像をグレースケールとして読み込む */
image = cvLoadImage("dede.jpg",CV_LOAD_IMAGE_GRAYSCALE);
if (image == NULL) {
fprintf(stderr, "読込みに失敗しました.");
return EXIT_FAILURE;
}
/* ウインドウを準備して画像を表示する */
cvNamedWindow("Grayscale01",CV_WINDOW_AUTOSIZE);
cvShowImage("Grayscale01",image);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&image);
/* ウィンドウを破棄する */
cvDestroyWindow("Grayscale01");
return EXIT_SUCCESS;
}
方法2
読み込んだ画像をcvCvtColor 関数でグレースケールに変換する.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
/* main */
int main(void) {
IplImage *source;
IplImage *gray;
/* 静止画像を読み込む */
source = cvLoadImage("dede.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(source == NULL){
fprintf(stderr, "読込みに失敗しました.");
return EXIT_FAILURE;
}
/* グレースケール画像用にメモリを確保 */
gray = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U,1);
/* カラー画像をグレースケールに変換 */
cvCvtColor(source,gray,CV_BGR2GRAY);
/* ウインドウを準備して画像を表示する */
cvNamedWindow("Grayscale02",CV_WINDOW_AUTOSIZE);
cvShowImage("Grayscale02",gray);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&gray);
/* ウィンドウを破棄する */
cvDestroyWindow("Grayscale02");
return EXIT_SUCCESS;
}
実行結果
実行結果は以下のようになる.
これは OpenCV 超初心者である私のメモです.
間違っている可能性がありますので注意してください.
OpenCV を使用して, 画像を読み込み表示するサンプルコードを以下に示す.
ソースコード
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>
/* main */
int main(void) {
IplImage* image;
/* 静止画像を読み込む */
image = cvLoadImage("dede.jpg",CV_LOAD_IMAGE_ANYCOLOR);
if (image == NULL) {
fprintf(stderr, "読込みに失敗しました.");
return EXIT_FAILURE;
}
/* ウインドウを準備して画像を表示する */
cvNamedWindow("Image",CV_WINDOW_AUTOSIZE);
cvShowImage("Image",image);
/* キー入力があるまで待つ */
cvWaitKey(0); /* これがないと、1瞬だけ表示されて終わる */
/* メモリを開放する */
cvReleaseImage(&image);
/* ウィンドウを破棄する */
cvDestroyWindow("Image");
return EXIT_SUCCESS;
}
実行結果
実行結果は以下のようになる.
C言語で配列に配列を代入するのは何故駄目なのか
C言語で配列に配列を代入すると、コンパイルエラーが発生します。例えば以下のコードをgccでコンパイルしようとすると、"incompatible types in assignment"というエラーが発生します。
1 /* header files */
2 #include <stdlib.h>
3 #include <stdio.h>
4
5 /* main */
6 int main (int argc, char *argv[]) {
7 char c1[] = "afa";
8 char c2[4];
9
10 c2 = c1;
11
12 return EXIT_SUCCESS;
13 }
|10| error: incompatible types in assignment
"incompatible types in assignment"とは、"互換性のない型に代入をしようとしている"という内容のエラーです。 char型の配列に、同じchar型の配列を代入しようしているのに互換性のない型だと怒られる。これは奇妙な話です。
何故駄目なのか
その理由を理解するためには、まず、C言語の右辺値と左辺値を知る必要があります。
右辺値と左辺値
例えば次のようなコードがあったとします。int x = 100; x = x + 1;
初心に返って考えると、これはxという箱の中に入っている値を+1して、その結果をxという箱に格納するコードです。 つまり、左辺のx(左辺値)はxという箱を表し、右辺のxは100という値を表しているわけです。 これを一般化してまとめると以下のようになります。

配列の格下げ規則
さて、本題の配列についてですが、配列の右辺値と左辺値は、普通の変数のそれとは少し異なります。 結論からいってしまえば、配列の左辺値は、配列の領域全体を意味し、 右辺値は、配列の先頭要素の置かれてる領域を意味します。 これを図で表すと以下のようになります。

配列は右辺値になると、配列から「配列の先頭要素の置かれてる領域」という意味に格下げになります。 これを配列の格下げ規則といいます。
配列に配列を代入するのは何故駄目なのか(結論)
配列の格下げ規則によって、配列の領域全体を表す変数に配列の先頭領域を格納しようとしてしまいます。 これによって、「互換性のない型に代入しようとしているよ」とコンパイラに怒られるというわけです。
