基于ARM9的攝像頭應(yīng)用

項(xiàng)目簡(jiǎn)介

1.1實(shí)驗(yàn)?zāi)繕?biāo)重述

ARM架構(gòu)的微處理器在追求低成本缅阳、低功耗和高性能的嵌入式系統(tǒng)領(lǐng)域占有主導(dǎo)地位,學(xué)習(xí)ARM微處理器的嵌入式系統(tǒng)設(shè)計(jì)對(duì)于未來的學(xué)習(xí)與實(shí)踐都有重要的意義解恰。本次實(shí)驗(yàn)霉撵,主要是基于KDLAB-I 嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)(核心為ARM9架構(gòu)的S3C2440微處理器),在Linux系統(tǒng)下進(jìn)行設(shè)計(jì)與編程帘撰,利用OV9650攝像頭實(shí)現(xiàn)攝像跑慕、采集圖片、分析圖片摧找、識(shí)別顏色的功能核行。
九層之臺(tái)牢硅,起于壘土,整個(gè)實(shí)驗(yàn)跨度達(dá)兩周芝雪,具體言之唤衫,又可以細(xì)分為以下幾個(gè)目標(biāo):
1、 熟悉Linux虛擬機(jī)的安裝和Linux系統(tǒng)的使用绵脯,掌握常見的命令,熟悉Linux系統(tǒng)下的操作邏輯休里;
2蛆挫、 了解ARM嵌入式Linux系統(tǒng)的開發(fā)過程,掌握修改妙黍、編寫悴侵、燒 寫應(yīng)用程序和驅(qū)動(dòng)程序的方法;
3拭嫁、 掌握嵌入式Linux系統(tǒng)開發(fā)交叉編譯環(huán)境的建立和使用;
4、 熟悉實(shí)驗(yàn)臺(tái)上常用外設(shè)的使用方法和連接方式尽爆;
5事秀、 熟練掌握攝像頭的應(yīng)用程序的編寫和調(diào)試;
6怕品、 熟悉RGB-565妇垢、RGB-888和HSI等常見顏色空間的轉(zhuǎn)換以及編程的實(shí)現(xiàn);
7肉康、 掌握位圖的保存格式闯估、數(shù)據(jù)格式和保存方法,并在Linux下編程實(shí)現(xiàn)吼和;
8涨薪、 掌握八鄰域生長算法的算法核心和編程實(shí)現(xiàn),并能夠在嵌入式 Linux系統(tǒng)中實(shí)現(xiàn)對(duì)拍攝圖片的正確連通炫乓;
9刚夺、 熟悉嵌入式系統(tǒng)的編程和調(diào)試方法,學(xué)會(huì)利用輸出來進(jìn)行調(diào)試末捣;

1.2作品功能分析

1光督、 攝像頭能夠?qū)崿F(xiàn)實(shí)時(shí)監(jiān)視功能,將拍攝到的圖像實(shí)時(shí)顯示在 LCD屏幕上塔粒;
2结借、 具備截圖功能,能夠定時(shí)或根據(jù)輸入保存當(dāng)時(shí)的實(shí)時(shí)畫面并另存為圖片卒茬;
3船老、 具備分析功能咖熟,能夠判別圖中是否存在面積達(dá)到一定大小的紅色色塊,并判定其形心和半徑柳畔;
4馍管、 具備結(jié)果可視化功能,可以將圖片處理為除原圖紅色區(qū)域外均為黑色的圖形薪韩,更加直觀确沸;

二、功能流程圖

三俘陷、實(shí)驗(yàn)過程

準(zhǔn)備:Linux平臺(tái)下ARM嵌入式編程基本操作

主要包括基本文件操作罗捎、定制與修改內(nèi)核、給開發(fā)板燒寫定制的嵌入式Linux系統(tǒng)以及虛擬機(jī)與ARM9開發(fā)板的通訊拉盾。
其中桨菜,燒寫系統(tǒng)或許是最重要的一項(xiàng)技能了,因?yàn)樵趯?shí)驗(yàn)的過程中幾乎每天都會(huì)遇到莫名其妙的故障捉偏,甚至連重啟都解決不了(比如無限自動(dòng)重啟)倒得,這時(shí)候我就采取了最笨的辦法——重新安裝系統(tǒng)。

例程學(xué)習(xí)——camtest.cpp

Trect類

例程將TRect用作屏幕顯示的基類夭禽,定義了圖像存儲(chǔ)的起始地址Addr霞掺, 圖像的尺寸Size、寬度Width讹躯、高度 Height根悼、每行圖像存儲(chǔ)時(shí)占 用的字節(jié)數(shù)LineLen以及圖像的位數(shù)BPP,并聲明和定義了將緩存數(shù)據(jù)顯示到屏幕上的DrawRect函數(shù)和清屏函數(shù)Clear蜀撑。在這次實(shí)驗(yàn)中挤巡,完成bmp圖像的存儲(chǔ)和圖像分析功能的SavePic函數(shù)都是通過在DrawRect基礎(chǔ)上加以修改來實(shí)現(xiàn)的。

TFrameBuffer類

TFrameBuffer作為TRect類的派生類酷麦,主要作為緩存矿卑,將 TVideo存儲(chǔ)的圖片信息通過映射放到內(nèi)存中,便于以后的直接讀 寫沃饶,也可以少用read()和write()這類讀寫函數(shù)母廷,加快讀寫 速度,其他部分沒有太大的改動(dòng)糊肤。

TVideo類

TVideo同樣是TRect類的派生類琴昆,這個(gè)派生類主要負(fù)責(zé)將攝像頭拍攝到的圖像存儲(chǔ)在緩存區(qū)中,以待TFrameBuffer轉(zhuǎn)存和顯示馆揉。

主函數(shù)

Camtest的主函數(shù)比較簡(jiǎn)單业舍,短短的幾行卻完成了很多事情,定義了一個(gè)TFrameBuffer對(duì)象和一個(gè)TVideo對(duì)象,調(diào)用FetchPicture函數(shù)存儲(chǔ)圖像之后舷暮,再調(diào)用DrawRect將圖像顯示到屏幕上态罪。使用for結(jié)構(gòu)無限循環(huán)此動(dòng)作,并在最外層使用try-catch的結(jié)構(gòu)來捕捉意外動(dòng)作下面。

雙線程

需求分析

最初并沒有打算使用雙線程复颈,但是在仔細(xì)分析之后,如果需要加入按鍵來決定是否采集分析圖像沥割,那么久不能使用單線程耗啦,否則將會(huì)出現(xiàn)用戶不按鍵,系統(tǒng)就一直等待的現(xiàn)象机杜,這顯然不是一個(gè)合格的系統(tǒng)所應(yīng)有的樣子帜讲。所以還是硬著頭皮使用了雙線程。一個(gè)線程負(fù)責(zé)鍵盤的檢測(cè)叉庐,另一個(gè)線程負(fù)責(zé)實(shí)時(shí)拍攝和顯示功能,并且会喝,沒有設(shè)置互斥量進(jìn)行交互以保證完全的實(shí)時(shí)運(yùn)行陡叠,設(shè)置了一個(gè)信息量以負(fù)責(zé)兩個(gè)線程之間的信息傳遞。

雙線程例程pthread學(xué)習(xí)

在雙線程的例程pthread中肢执,首先聲明了互斥量pthread_tmutex枉阵,之后聲明了主線程writer_function和子線程reader_function,在主函數(shù)中創(chuàng)建了子線程的進(jìn)程预茄,而主函數(shù)則運(yùn)行主線程兴溜,兩者通過互斥量進(jìn)行交互,分別作為生產(chǎn)者和消費(fèi)者增加和減少虛擬的緩存buffer_has_item耻陕,并在PC終端上對(duì)剩余的緩存產(chǎn)品進(jìn)行顯示拙徽。

雙線程設(shè)計(jì)

基于之前的分析,將雙線程例程中的互斥量去掉以保證兩個(gè)線程能夠完全獨(dú)立地工作诗宣。當(dāng)然在Makefile中還要在編譯語句的最后加上-lpthread膘怕,把多線程的庫鏈接上。在兩個(gè)獨(dú)立的線程中進(jìn)一步添加功能召庞。

顏色識(shí)別

什么是顏色空間

顏色通常用三個(gè)相對(duì)獨(dú)立的屬性來描述岛心,三個(gè)獨(dú)立變量綜合作用,自然就構(gòu)成一個(gè)空間坐標(biāo)篮灼,這就是顏色空間忘古。而顏色可以由不同的角度,用三個(gè)一組的不同屬性加以描述诅诱,就產(chǎn)生了不同的顏色空間髓堪。雖然被描述的對(duì)象顏色是客觀存在的,但是很明顯這是多指標(biāo)非線性的,由于不同場(chǎng)合的需求不同旦袋,因此不同的顏色空間仍有存在的必要骤菠。顏色空間按照基本結(jié)構(gòu)可以分兩大類:基色顏色空間和色、亮分離顏色空間疤孕。前者的典型是RGB商乎;后者包括 YCC/YUV、Lab祭阀、以及一批“色相類顏色空間”鹉戚。

RGB顏色空間

RGB顏色空間是一種大的分類,具體而言RGB空間還包含多種空間专控,其中sRGB是HP和Microsoft聯(lián)合制定的標(biāo)準(zhǔn)RGB空間抹凳,除此之外還有Adobe RGB,Apple RGB伦腐,ColorMatch RGB等等赢底,他們通過不同的方式表示RGB三種顏色,使得它們具有不同的色彩寬度柏蘑,GAMMA值也是不一樣的幸冻,但是在此處并不需要多加討論。
本實(shí)驗(yàn)平臺(tái)上攝像頭OV9650回傳的數(shù)據(jù)是RGB565格式的咳焚,相對(duì)RGB888格式(俗稱24位真彩色)犧牲了一定的信息量洽损,由于在想HSI空間轉(zhuǎn)換的時(shí)候需要全部的RGB信息,因此還需要轉(zhuǎn)化到RGB888格式革半,這其中更還涉及到補(bǔ)償碑定,會(huì)在后面敘述。

HSI顏色空間

HSI模型屬于第二類色亮分離的顏色空間又官,其建立基于兩個(gè)重要的事實(shí): 1°L分量與圖像的彩色信息無關(guān);2°H和S分量與人感受顏色的方式是緊密相聯(lián)的延刘。這些特點(diǎn)使得HSI模型非常適合彩色特性檢測(cè)與分析。


hsi-colour-palette2.png

HSI模型是美國色彩學(xué)家孟塞爾(H.A.Munseu)于1915年提出的六敬,它反映了人的視覺系統(tǒng)感知彩色的方式访娶,用色調(diào)(Hue)、色飽和度(Saturation或Chroma)和亮度 (Intensity或Brightness)來描述色彩其中觉阅,色調(diào)與光波的波長有關(guān)崖疤,它表示人的感官對(duì)不同顏色的感受,如紅色典勇、綠色劫哼、藍(lán)色等,它也可表示一定范圍的顏色割笙,如暖色权烧、冷色等眯亦。飽和度 表示顏色的純度,純光譜色是完全飽和的般码,加入白光會(huì)稀釋飽和度妻率。飽和度越大,顏色看起來就會(huì)越鮮艷板祝,反之亦然宫静。亮度 對(duì)應(yīng)成像亮度和圖像灰度,是顏色的明亮程度券时。HSI色彩空間可以用一個(gè)圓錐空間模型來描述孤里。雖然這種圓錐模型相當(dāng)復(fù)雜,但確能把色調(diào)橘洞、亮度和色飽和度的變化情形表現(xiàn)得很清楚捌袜。為了便于色彩處理和識(shí)別,人的視覺系統(tǒng)經(jīng)常采用HSI色彩空間炸枣, 它比RGB色彩空間更符合人的視覺特性虏等。在圖像處理和計(jì)算機(jī)視覺中大量算法都可在HSI色彩空間中方便地使用,它們可以分開處理而且是相互獨(dú)立的适肠。因此霍衫,在HSI色彩空間可以大大簡(jiǎn)化圖像分析和處理的工作量。HSI色彩空間和RGB色彩空間只是同一物理量的不同表示法迂猴,因而它們之間存在著轉(zhuǎn)換關(guān)系慕淡。

RGB565->RGB888

將RGB565格式轉(zhuǎn)換為RGB888以進(jìn)行到HIS顏色空間的轉(zhuǎn)換的必要性之前已經(jīng)講過背伴。我們知道RGB565格式分別保存了色彩的RGB分量的高5位沸毁、6位、5位傻寂,那么息尺,亟需做的一件事情就是決定如何添加低位信息,最直接的想法是低位補(bǔ)零疾掰,但是實(shí)踐表明效果并不好搂誉,現(xiàn)在被廣泛采用是是一種稱為量化補(bǔ)償?shù)姆椒ǎ腥齻€(gè)步驟:
  1. 將原數(shù)據(jù)填充至高位
  2. 對(duì)于低位静檬,用原始數(shù)據(jù)的低位進(jìn)行補(bǔ)償
  3. 如果仍然有未填充的位炭懊,繼續(xù)使用原始數(shù)據(jù)的低位進(jìn)行循環(huán)補(bǔ)償
  解釋一下循環(huán)補(bǔ)償?shù)母拍睿?br>   16bit RGB565 -> 24bit RGB888 的轉(zhuǎn)換
  8bit RGB565 R4 R3 R2 R1 R0 - - - G2 G1 G0 B1 B0
  24bit RGB888 R2 R1 R0 0 0 0 0 0 G2 G1 G0 0 0 0 0 0 B1 B0 0 0 0 0 0 0
  24bit RGB888 R2 R1 R0 R2 R1 R0 0 0 G2 G1 G0 G2 G1 G0 0 0 B1 B0 B1 B0 0 0 0 0
  24bit RGB888 R2 R1 R0 R2 R1 R0 R2 R1 G2 G1 G0 G2 G1 G0 G2 G1 B1 B0 B1 B0 B1 B0 0 0
  24bit RGB888 R2 R1 R0 R2 R1 R0 R2 R1 G2 G1 G0 G2 G1 G0 G2 G1 B1 B0 B1 B0 B1 B0 B1 B0

RGB顏色空間到HSI顏色空間的轉(zhuǎn)換

** 紅色界定**
量化補(bǔ)償只是優(yōu)化顯示效果,并不能改變實(shí)際所觀測(cè)的結(jié)果拂檩,所以侮腹,在編程的時(shí)候直接考慮從原始的RGB565格式的數(shù)據(jù)著手。
由于G是高6位稻励,B是高5位參照網(wǎng)上資料父阻,當(dāng)G愈涩、B均小于10左右,R大于200加矛,可以視為紅色履婉,故此處僅考慮G末位為000001/000000;
B為00000;紅色為111**;
即只有這幾種可能:
11100000 11101000 11110000 11111000 32+64+128+8+16=224,232斟览,240毁腿,248
00000000 00100000 0/32

一些小Trick

宏與三目運(yùn)算符嵌套

在進(jìn)行RGB到HSI的轉(zhuǎn)換的時(shí)候,有一個(gè)比較RGB三者大小的步驟趣惠,本來是寫的if語句嵌套狸棍,但是想想貌似有點(diǎn)累贅,于是便選擇了三目運(yùn)算符的嵌套并寫成了宏味悄,效果還不錯(cuò)草戈,減少了二十多行的代碼量。

    #define MAX(a,b,c) ((a>b)?((a>c)?a:c):((b>c)?b:c))

實(shí)驗(yàn)記錄

Segmentation Fault

在嘗試進(jìn)行更進(jìn)一步的圖像處理的時(shí)候侍瑟,試圖將圖像數(shù)據(jù)寫入數(shù)組再進(jìn)行分析唐片,但是出現(xiàn)了

=============
RESOURCE
今天在REVIEW代碼的時(shí)候,發(fā)現(xiàn)了這樣一個(gè)宏定義:

define COLOR_TO_MTK_COLOR_SIMUL(color) ((((color) >> 19) & 0x1f) << 11) \

                                        |((((color) >> 10) & 0x3f) << 5)  \
                                        |(((color) >> 3) & 0x1f)  

大家知道這個(gè)宏是用來干什么的嗎涨颜?

仔細(xì)分析后费韭,原來就是實(shí)現(xiàn)了RGB888到RGB565的轉(zhuǎn)換,查閱相關(guān)資料后星持,發(fā)現(xiàn)網(wǎng)絡(luò)上有一篇牛人寫的東東穷吮,在此和大家分享。

講一下量化壓縮與量化補(bǔ)償吧

在進(jìn)行色彩格式轉(zhuǎn)換的時(shí)候,經(jīng)常會(huì)遇到色彩量化位數(shù)的改變管引,比如說從 24bit RGB888 到 16bit RGB565 的色彩轉(zhuǎn)換。所謂量化壓縮與量化補(bǔ)償都是我個(gè)人所提出的概念,現(xiàn)說明如下屯援。

量化壓縮,舉例:

24bit RGB888 -> 16bit RGB565 的轉(zhuǎn)換

24ibt RGB888 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0

16bit RGB656 R7 R6 R5 R4 R3 G7 G6 G5 G4 G3 G2 B7 B6 B5 B4 B3

量化位數(shù)從8bit到5bit或6bit借嗽,取原8bit的高位惨寿,量化上做了壓縮易稠,卻損失了精度缸废。

量化補(bǔ)償,舉例:

16bit RGB565 -> 24bit RGB888 的轉(zhuǎn)換

16bit RGB656 R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

24ibt RGB888 R4 R3 R2 R1 R0 0 0 0 G5 G4 G3 G2 G1 G0 0 0 B4 B3 B2 B1 B0 0 0 0

24ibt RGB888 R4 R3 R2 R1 R0 R2 R1 R0 G5 G4 G3 G2 G1 G0 G1 G0 B4 B3 B2 B1 B0 B2 B1 B0

說明:第二行的 24bit RGB888 數(shù)據(jù)為轉(zhuǎn)換后驶社,未進(jìn)行補(bǔ)償?shù)臄?shù)據(jù)企量,在精度上會(huì)有損失

第三行的 24bit RGB888 數(shù)據(jù)為經(jīng)過量化補(bǔ)償?shù)臄?shù)據(jù),對(duì)低位做了量化補(bǔ)償

可以很容易的證明亡电,這樣的補(bǔ)償方法是一種合理的線性補(bǔ)償届巩。補(bǔ)償?shù)脑砗芎?jiǎn)單,大家仔細(xì)想一下就明白了份乒,因此不再詳細(xì)說明恕汇。

總結(jié)一下:

量化壓縮的方法:三個(gè)字取高位

量化補(bǔ)償?shù)姆椒ǎ?/p>

1. 將原數(shù)據(jù)填充至高位

2. 對(duì)于低位腕唧,用原始數(shù)據(jù)的低位進(jìn)行補(bǔ)償

3. 如果仍然有未填充的位,繼續(xù)使用原始數(shù)據(jù)的低位進(jìn)行循環(huán)補(bǔ)償

解釋一下循環(huán)補(bǔ)償?shù)母拍睿?/p>

8bit RGB332 -> 24bit RGB888 的轉(zhuǎn)換

8bit RGB332 R2 R1 R0 G2 G1 G0 B1 B0

24bit RGB888 R2 R1 R0 0 0 0 0 0 G2 G1 G0 0 0 0 0 0 B1 B0 0 0 0 0 0 0

24bit RGB888 R2 R1 R0 R2 R1 R0 0 0 G2 G1 G0 G2 G1 G0 0 0 B1 B0 B1 B0 0 0 0 0

24bit RGB888 R2 R1 R0 R2 R1 R0 R2 R1 G2 G1 G0 G2 G1 G0 G2 G1 B1 B0 B1 B0 B1 B0 0 0

24bit RGB888 R2 R1 R0 R2 R1 R0 R2 R1 G2 G1 G0 G2 G1 G0 G2 G1 B1 B0 B1 B0 B1 B0 B1 B0

看了這個(gè)瘾英,應(yīng)該明白則么回事了吧枣接,其中B分量,進(jìn)行了四輪的補(bǔ)償缺谴,達(dá)到要求但惶。

量化補(bǔ)償?shù)谋匾裕瑥闹庇X上講湿蛔,我所提出的這種補(bǔ)償方法是正確的(因?yàn)槲也]有嚴(yán)格的去證明)膀曾,進(jìn)行這樣的補(bǔ)償,在做色彩各式轉(zhuǎn)換的時(shí)候阳啥,能夠明顯的改善色彩效果添谊,減少精度上的損失。

對(duì)256色調(diào)色板模式的認(rèn)識(shí)和應(yīng)用察迟,順便講一下這個(gè)碉钠,因?yàn)榱炕瘔嚎s和量化補(bǔ)償剛好可以應(yīng)用到調(diào)色板模式下。大家都知道卷拘,很早以前就有人提過出256色的標(biāo)準(zhǔn)調(diào)色板的概念(有的人又稱之為抖動(dòng)調(diào)色板或者萬能調(diào)色板)喊废,其實(shí)這樣的調(diào)色板并不神秘。256色中栗弟,一個(gè)像素點(diǎn)用8bit表示污筷,那么如果采用 8bit RGB332 的格式,一切問題都可以想通乍赫,并且可以進(jìn)行很好的處理了瓣蛀。對(duì)于每個(gè) RGB332 的顏色,都可以使用量化補(bǔ)償?shù)淖龇ɡ壮В瑢⑵滢D(zhuǎn)換為 24bit RGB888 的顏色格式惋增,然后將其設(shè)置為調(diào)色板即可。這樣改鲫,實(shí)質(zhì)上是將256色調(diào)色板模式诈皿,轉(zhuǎn)換為了 8bit RGB332 的像素格式。這樣的調(diào)色板方式像棘,更加利于某些方面的處理稽亏,比如調(diào)色板匹配、Alpha混合等缕题。由于采用了這樣的方法截歉,一個(gè)像素點(diǎn)的顏色值,與其實(shí)際的RGB顏色值烟零,可以很方便的通過量化補(bǔ)償?shù)姆椒ㄞD(zhuǎn)換出來瘪松,然后就可以對(duì)各個(gè)顏色分量進(jìn)行計(jì)算咸作,計(jì)算完畢,再使用量化壓縮的方法宵睦,就可以生成最終需要的顏色值性宏。而所謂的調(diào)色板匹配的問題,當(dāng)然也更加好解決了状飞。關(guān)鍵是要把問題想通毫胜,把握事物的本質(zhì),才能找到簡(jiǎn)單而優(yōu)美的解決問題的方法诬辈。

以前我對(duì)標(biāo)準(zhǔn)調(diào)色板的認(rèn)識(shí)也存在很多錯(cuò)誤酵使,導(dǎo)致在分析和解決問題上,沒有能找到最好的方法焙糟。網(wǎng)上也有許多人寫過有關(guān)256色模式下 Alpha Blending 的文章口渔,但是都存在許多認(rèn)識(shí)上的不足,導(dǎo)致最后給出的算法時(shí)間和空間的復(fù)雜度都太大穿撮。我也有過一篇有關(guān)256色Alpha混合的文章缺脉,但限于當(dāng)時(shí)對(duì)事物的認(rèn)知能力,因此現(xiàn)在看來以前的許多文章是慘不忍睹悦穿。大家都在進(jìn)步攻礼,以后有機(jī)會(huì)再將新的認(rèn)識(shí)寫成文章,同大家分享栗柒。

hsi-colour-palette2.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末礁扮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞬沦,更是在濱河造成了極大的恐慌太伊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逛钻,死亡現(xiàn)場(chǎng)離奇詭異僚焦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)曙痘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門芳悲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屡江,你說我怎么就攤上這事芭概∪唬” “怎么了惩嘉?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踢故。 經(jīng)常有香客問我文黎,道長惹苗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任耸峭,我火速辦了婚禮桩蓉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劳闹。我一直安慰自己院究,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布本涕。 她就那樣靜靜地躺著业汰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菩颖。 梳的紋絲不亂的頭發(fā)上样漆,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音晦闰,去河邊找鬼放祟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呻右,可吹牛的內(nèi)容都是我干的跪妥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼声滥,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼骗奖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起醒串,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤执桌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芜赌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仰挣,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年缠沈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膘壶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洲愤,死狀恐怖颓芭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柬赐,我是刑警寧澤亡问,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響州藕,放射性物質(zhì)發(fā)生泄漏束世。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一床玻、第九天 我趴在偏房一處隱蔽的房頂上張望毁涉。 院中可真熱鬧,春花似錦锈死、人聲如沸贫堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽严嗜。三九已至,卻和暖如春洲敢,著一層夾襖步出監(jiān)牢的瞬間漫玄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工压彭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睦优,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓壮不,卻偏偏與公主長得像汗盘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子询一,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容